Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.190.144] |
|
Страницы: (4) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
в вектор Vx и Vy считываю из файла вот такой ряд данных
01.2017 -525 02.2017 -571 03.2017 -363 04.2017 -384 05.2017 -537 06.2017 -671 но когда вывожу на экран Vx то получается только вот 2017 2017 2017 2017 кто-нибудь подскажет как исправить? vector<double>Vi; vector<double>Vj; double **massiv; massiv = new double*[count_row]; for (int i = 0; i < count_row; i++) { massiv[i] = new double[count_col]; } //считываем матрицу из файла for (int i = 0; i < count_row; i++) { for (int j = 0; j < count_col; j++) { massiv[i][j] = v.at(i*count_col + j); } } for (int i = 0; i < count_row; i++) { Vi.push_back(massiv[i][0]); Vj.push_back(massiv[i][1]); } for (auto it : Vx) { std::cout << it << std::endl; } Добавлено отпал вопрос |
Сообщ.
#2
,
|
|
|
Вот вам пример адекватного чтения файла в вашем формате.
#include <iostream> #include <string.h> #include <string> #include <sstream> #include <fstream> #include <memory> #include <vector> struct Time { int year; int month; }; class Row { private: double value; Time time; public: Row(Time time, double value); ~Row(); double getValue() const; Time getTime() const; }; typedef std::shared_ptr<Row> RowPtr; Row::~Row() { } Row::Row(Time time, double value){ this->time=time; this->value=value; } double Row::getValue() const { return this->value; } Time Row::getTime() const { return this->time; } namespace IOService { std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) { std::stringstream ss(s); std::string item; while (std::getline(ss, item, delim)) { elems.push_back(item); } return elems; } std::vector<std::string> split(const std::string &s, char delim) { std::vector<std::string> elems; split(s, delim, elems); return elems; } std::vector<RowPtr> readData(std::string filename) { std::vector<RowPtr> result; std::ifstream file(filename); std::string line; while(std::getline(file, line)) { std::vector<std::string> items; try { items = split(line,' '); Time time; double value = std::stod(items[1]); std::vector<std::string> timeParams = split(items[0],'.'); time.year = std::stoi(timeParams[0]); time.month = std::stoi(timeParams[1]); result.push_back(RowPtr(new Row(time,value))); } catch (std::exception &e){ std::cout<<"exception: "<<e.what(); } } return result; } } void pause(){ int ret; std::cin>>ret; } int main() { std::vector<RowPtr> data = IOService::readData("test.txt"); for(std::vector<RowPtr>::iterator it = data.begin(); it!=data.end(); ++it){ Time time = (*it)->getTime(); double value = (*it)->getValue(); std::cout<<"time: "<<time.year<<"."<<time.month<<", value: "<<value<<"\n"; } pause(); return 0; } |
Сообщ.
#3
,
|
|
|
VisualProg, указатели (даже умные) тут совершенно не нужны и чтение данных можно организовать намного проще.
|
Сообщ.
#4
,
|
|
|
Цитата shm @ указатели (даже умные) тут совершенно не нужны Да, это уже вредная привычка, тут можно просто копировать вектора с содержимым при передачи. Цитата shm @ чтение данных можно организовать намного проще Ну, в отличие от ТС, эта часть кода у меня в листинге присутствует На то он и пример, что не заставляет делать только так а не иначе) |
Сообщ.
#5
,
|
|
|
Цитата VisualProg @ тут можно просто копировать вектора с содержимым при передачи. http://www.cplusplus.com/reference/vector/...r/emplace_back/ Добавлено https://habrahabr.ru/post/242639/ |
Сообщ.
#6
,
|
|
|
Цитата shm @ http://www.cplusplus.com/reference/vector/...r/emplace_back/ Добавлено 3 минуты назад https://habrahabr.ru/post/242639/ Великолепная статья и описание! Надо срочно к этому привыкать, огромное спасибо |
Сообщ.
#7
,
|
|
|
Цитата Nelly0892 @ но когда вывожу на экран Vx то получается только вот 2017 2017 2017 2017 а надо как? |
Сообщ.
#8
,
|
|
|
ты считать-то умеешь?
Цитата Nelly0892 @ 01.2017 -525 02.2017 -571 03.2017 -363 04.2017 -384 05.2017 -537 06.2017 -671 6 раз по 2017 должно быть, шесть! VisualProg, никогда не понимал это любви к нэймспесам, или каждый засвет std:: это минус 1мс к компиляции? почему бы просто не написать using namespace std, ы? да и не осилит неля такой код (только шаблонов не хватает), надо чёнить попроще. |
Сообщ.
#9
,
|
|
|
Цитата _lcf_ @ почему бы просто не написать using namespace std, ы? Ну для лабы пойдет. А вот в больших проектах бывают из-за конфликтов имен проблемы. |
Сообщ.
#10
,
|
|
|
Цитата _lcf_ @ никогда не понимал это любви к нэймспесам, или каждый засвет std:: это минус 1мс к компиляции? Это убирает вероятность пересечения имён. В шарпе и яве я этого избегаю потому что знаю окружение. А вот в плюсах и сях в глобальной области столько всего + всего этого я даже не знаю (а тут мы ещё и содержимое всяких std подтягиваем), поэтому боюсь на что нибудь нарваться Цитата _lcf_ @ надо чёнить попроще. Ну, тут суть не в самом коде, а в том что алгоритм чётко прослеживается - идёт загрузка, что происходит по время чтения видно не вооружённым глазом - обычные split-ы и преобразования из строки в int/double. А так, да, можно убрать класс и всё в структуру впихнуть, но, тогда всё начнёт копироваться по значению... |
Сообщ.
#11
,
|
|
|
ну это совсем фантазии не должно быть, чтобы законфликтовать со стандартными нэймспейсами. да и решение простое есть - префиксы, в соответствии с проектом/модулем. в любом случае это проще, чем писать по стопицот раз имя пространства. да и юзинг не обязательно на весь сипишник кидать
|
Сообщ.
#12
,
|
|
|
Цитата _lcf_ @ ну это совсем фантазии не должно быть, чтобы законфликтовать со стандартными нэймспейсами. Законфликтовать могут и внешние либы, причем ситуация встречается довольно часто. |
Сообщ.
#13
,
|
|
|
я не делаю юзинг только если упоминаний мало или когда в одном месте явно разные сущности перескаются, например std и opencv, и то не для того, чтобы конфликтов не было, а чтобы видеть где чьё
|
Сообщ.
#14
,
|
|
|
И на мой взгляд пространства имен - это более элегантное решение, чем префиксы в названиях.
|
Сообщ.
#15
,
|
|
|
Цитата shm @ И на мой взгляд пространства имен - это более элегантное решение, чем префиксы в названиях. Именно! А в некоторых крупных проектах запрещено использовать префиксы, особенно если код не связан с низкоуровневым программированием. |