2015-07-08 2 views
-3

Я могу показать значения, хранящиеся в векторной памяти (см. Отредактированный код). Как сохранить значения в vec.name? Это синтаксис, с которым у меня проблема. Конкретно определяя контейнер для vec.name, а также сохраняя в нем данные с помощью push_back.Доступ к вектору за пределами цикла C++

#include <vector> 
    #include <iostream> 
    #include <fstream> 
    #include <cmath> 
    #include <cstdlib> 
    #include <set> 

    using namespace std; 

    //struct vec { 
    // int name; 
    //}; 

    //vector<vec> mem; 
    vector<int> mem;  
    size_t nx, ny, nz; 

    void read(const char * name) 
    { 
     ifstream file(name); 
     cout << "read file " << name << endl; 
     size_t Nx, Ny, Nz; 
     file >> Nx >> Ny >> Nz; 
     int c=0; 
     size_t itens; 

     for (size_t z = 0 ; z < Nz ; ++z) { 
      for (size_t y = 0 ; y < Ny ; ++y) { 
       for (size_t x = 0 ; x < Nx ; ++x) { 
        c=c+1; 
        file >> itens;     
         //mem[c].name = itens; 
         mem.push_back(itens); 

       } 
      }  
     } 
    } 



    int main() 
    { 

     read("names.txt"); 
     for(int i=0;i<26;i++){ 
     cout << mem[i] <<endl; 
     } 
     cout << "Computation done." << endl; 
     return 0; 

    } 
+1

Можете ли вы показать фрагмент кода с помощью цикла, вектора и структуры, на которые вы ссылаетесь? Кроме того, вы пробовали переходить через код в отладчике, чтобы посмотреть на значения вектора во время выполнения? – CoryKramer

+0

Возможно 'vec [0] .name'? – rodrigo

+0

ОК, просто добавил код. Благодарю. – user147813

ответ

2

Update после вашего комментария и Редактировать:

Вы получаете Segmentation Fault в первый раз, когда вы находитесь на линии mem[c].name = itens;, потому что вы пытаетесь получить доступ к mem[1], которые вы не создали , Чтобы получить доступ к элементу вектора, вам нужно добавить его в вектор, обычно используя push_back. Поскольку вы пытаетесь получить доступ ко второму элементу вектора, вы должны позвонить по телефону push_back не менее двух раз.

Возможно, вам также понадобится выполнить некоторые дополнительные исправления в вашем алгоритме, но я оставлю его вам.


Мой первоначальный ответ:

Ваш контейнер vector<vec> name. Вы можете получить доступ к своему n-му элементу на name[n]. Вы можете получить доступную переменную члена n'th элемента mm на name[n].mm

Код, который вы используете в своем фрагменте (vec[c].name), неверен.

+1

Hi Igor - я действительно ошибся при копировании кода здесь. Я отредактировал фрагмент с исправлением, о котором вы говорили. При запуске кода я сразу получаю ошибку сегментации. Я знаю, что это значит, но не понимаю, что не так со мной, и как я могу это исправить. Надеюсь, что очистит то, что мои вопросы на данный момент: почему ошибка сегментации и как ее исправить. Пожалуйста, несите меня, поскольку я только начинаю изучать C++. Спасибо за ваше терпение. – user147813

+0

Спасибо, это помогло. Я могу показать значения, хранящиеся в векторной памяти (см. Отредактированный код). Как сохранить значения в vec.name? Это синтаксис, с которым у меня проблема. Конкретно определяя контейнер для vec.name, а также сохраняя в нем данные с помощью push_back. – user147813

Смежные вопросы