На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> считывание из файла чисел формата double
    в вектор 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

    кто-нибудь подскажет как исправить?


    ExpandedWrap disabled
          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; }


    Добавлено
    отпал вопрос
      Вот вам пример адекватного чтения файла в вашем формате.

      ExpandedWrap disabled
        #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;
        }
        VisualProg, указатели (даже умные) тут совершенно не нужны и чтение данных можно организовать намного проще.
          Цитата shm @
          указатели (даже умные) тут совершенно не нужны

          Да, это уже вредная привычка, тут можно просто копировать вектора с содержимым при передачи.

          Цитата shm @
          чтение данных можно организовать намного проще

          Ну, в отличие от ТС, эта часть кода у меня в листинге присутствует :lol:

          На то он и пример, что не заставляет делать только так а не иначе)
            Цитата VisualProg @
            тут можно просто копировать вектора с содержимым при передачи.

            http://www.cplusplus.com/reference/vector/...r/emplace_back/

            Добавлено
            https://habrahabr.ru/post/242639/
              Цитата shm @


              Великолепная статья и описание! Надо срочно к этому привыкать, огромное спасибо :thanks:
                Цитата Nelly0892 @
                но когда вывожу на экран Vx то получается только вот
                2017 2017 2017 2017

                а надо как? :D
                  ты считать-то умеешь?
                  Цитата Nelly0892 @
                  01.2017 -525
                  02.2017 -571
                  03.2017 -363
                  04.2017 -384
                  05.2017 -537
                  06.2017 -671

                  6 раз по 2017 должно быть, шесть! :angry:
                  VisualProg, никогда не понимал это любви к нэймспесам, или каждый засвет std:: это минус 1мс к компиляции? :jokingly: почему бы просто не написать using namespace std, ы?
                  да и не осилит неля такой код (только шаблонов не хватает), надо чёнить попроще.
                  Сообщение отредактировано: _lcf_ -
                    Цитата _lcf_ @
                    почему бы просто не написать using namespace std, ы?

                    Ну для лабы пойдет. А вот в больших проектах бывают из-за конфликтов имен проблемы.
                      Цитата _lcf_ @
                      никогда не понимал это любви к нэймспесам, или каждый засвет std:: это минус 1мс к компиляции?

                      Это убирает вероятность пересечения имён. В шарпе и яве я этого избегаю потому что знаю окружение. А вот в плюсах и сях в глобальной области столько всего + всего этого я даже не знаю (а тут мы ещё и содержимое всяких std подтягиваем), поэтому боюсь на что нибудь нарваться :D

                      Цитата _lcf_ @
                      надо чёнить попроще.

                      Ну, тут суть не в самом коде, а в том что алгоритм чётко прослеживается - идёт загрузка, что происходит по время чтения видно не вооружённым глазом - обычные split-ы и преобразования из строки в int/double. А так, да, можно убрать класс и всё в структуру впихнуть, но, тогда всё начнёт копироваться по значению...
                        ну это совсем фантазии не должно быть, чтобы законфликтовать со стандартными нэймспейсами. да и решение простое есть - префиксы, в соответствии с проектом/модулем. в любом случае это проще, чем писать по стопицот раз имя пространства. да и юзинг не обязательно на весь сипишник кидать ;)
                          Цитата _lcf_ @
                          ну это совсем фантазии не должно быть, чтобы законфликтовать со стандартными нэймспейсами.

                          Законфликтовать могут и внешние либы, причем ситуация встречается довольно часто.
                            я не делаю юзинг только если упоминаний мало или когда в одном месте явно разные сущности перескаются, например std и opencv, и то не для того, чтобы конфликтов не было, а чтобы видеть где чьё :)
                              И на мой взгляд пространства имен - это более элегантное решение, чем префиксы в названиях.
                                Цитата shm @
                                И на мой взгляд пространства имен - это более элегантное решение, чем префиксы в названиях.

                                Именно! А в некоторых крупных проектах запрещено использовать префиксы, особенно если код не связан с низкоуровневым программированием.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0409 ]   [ 17 queries used ]   [ Generated: 19.04.24, 06:58 GMT ]