2016-10-31 2 views
-3

Я попытался построить матрицу 7 * 3, а затем распечатать ее элементы по мере инициализации значений, но, к сожалению, программа завершается при запуске. Если есть более простой и эффективный способ выполнения одного и того же процесса, скажите, пожалуйста.Как мне получить доступ и распечатать отдельные элементы вектора векторов?

vector< vector<int> > v1; 
for(int i = 0;i < 7;i++) 
{ 
    for(int j = 0;j < 3;j++) 
    { 
     v1[i].push_back(i + j); 
     cout << v1[i][j] << " "; 
    } 
    cout << "\n"; 
} 
+0

"Прерывает"? Как в исключении или ошибке? Покажите нам ... – MordechayS

+4

Помните, что векторы начинаются пустыми, и все индексирование в них выходит за пределы. Начните с отбрасывания вектора 'во внешний вектор. –

+0

@MordechayS Ну, он компилируется без каких-либо проблем, но когда я запускаю программу, он отображает «Обработанный результат -1073741819 <0xC0000005>» – Jeswin

ответ

3

Вы забыли инициализировать v1.

Вы можете использовать следующее:

std::vector<std::vector<int>> v1(7, std::vector<int>(3)); 
for (int i = 0; i != 7; ++i) { 
    for (int j = 0; j != 3; ++j) { 
     v1[i][j] = i + j; 
    } 
} 

// Display 
for (const auto& row : v1) { 
    for (const auto& e : row) { 
     std::cout << e << " "; 
    } 
    std::cout << "\n"; 
} 
+0

Могу ли я также инициализировать переменные v1? – Jeswin

+0

Обратите внимание на то, что вы имеете в виду, но вы можете инициализировать 'v1' много способов:' std :: vector > v1 {{1, 2, 3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15}, {16,17,18}, {19,20,21}}, ' – Jarod42

+0

Например, скажем: int N = 7, x = 3. Теперь я могу инициализировать v1 как std :: vector > v1 (N, std :: vector (x)); – Jeswin

0

Вы должны поместить пустой vector<int> в v1 перед использованием v1[x]:

vector< vector<int> > v1; 
for(int i = 0;i < 7;i++) 
{ 
    v1.push_back(vector<int>()); 
    for(int j = 0;j < 3;j++) 
    { 
     v1[i].push_back(i + j); 
     cout << v1[i][j] << " "; 
    } 
    cout << "\n"; 
} 

Тип vector< vector<int> > v1; как-то странно, но два вектора имеет разные значения. Сначала нужно определить тип v1, и в этот момент v1 станет пустым вектором. Вместо этого второй вектор означает только то, что может содержать тип v1. Таким образом, при определении этого v1 готов к использованию, однако v1[x] еще не созданы.

0

Да, ваш код аварии вполне очевидно.
Попробуйте это:

std::vector< std::vector<int> > v1; 
for (int i = 0; i < 7; ++i) 
{ 
    v1.push_back(std::vector<int>()); 
    for (int j = 0; j < 3; ++j) 
    { 
     v1[i].push_back(i + j); 
     std::cout << v1[i][j] << " "; 
    } 
    std::cout << "\n"; 
} 

EDIT: Хорошо ... Уже ответил, слишком поздно ;-)

+2

хорошо ... очевидно, что это не очевидно для него, иначе он не спросил бы здесь – bolov

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