2016-11-09 2 views
0

Вот мой 2D-вектор целых чисел.Почему я не могу нажать вектор целых чисел в двумерный вектор целых чисел в C++?

vector<vector<int>> nodes (r*c, vector<int> (5)); 

используя цикл for Я пытаюсь указать значения push_back в этом векторе. r и c передаются целые числа к этой функции.

for(i = 0; i < r*c; i++) 

{   
     nodes[i].push_back({i/c, i%c, -1, -1, 0}); 

} 

ответ

0

nodes[i] является вектором целых. Вы пытаетесь добавить вектор в вектор целых чисел.

Либо сделать:

nodes.push_back({i/c, i%c, -1, -1, 0}); 

или

nodes[i] = {i/c, i%c, -1, -1, 0}; 

Второе решение является лучшим, так как вы уже дали правильное измерение вашего вектора. Нет необходимости добавлять больше r*c элементы ...

в вашем коде, либо создать пустой, и заполнить с push_back:

std::vector<std::vector<int>> nodes; 
for(i = 0; i < r*c; i++) 
{   
    nodes.push_back({i/c, i%c, -1, -1, 0}); 
} 

или создать с помощью правильного измерения и назначить пункты:

std::vector<std::vector<int>> nodes (r*c, std::vector<int> (5)); 
for(i = 0; i < r*c; i++) 
{   
    nodes[i] = {i/c, i%c, -1, -1, 0}; 
} 
+0

Привет, Джин, спасибо большое! Это решило проблему! – Ishrat

0

метод использования insert вместо push_back

nodes[i].insert(nodes[I].end(), {i/c, i%c, -1, -1, 0}); 

Но перед этим вы должны объявить вектор как

vector<vector<int>> nodes (r*c); 

В противном случае первые 5 элементов каждого подвектора будет содержать нули.

Также вы можете использовать метод assign

nodes[i].assign( {i/c, i%c, -1, -1, 0}); 
+0

, что это не проблема. 'nodes [i]' является вектором _integers_. Вы не можете вставить в него вектор. Вот почему 'push_back' терпит неудачу (и' insert' компилирует, но бог знает, что он делает. Segfault здесь) –

+0

@ Jean-FrançoisFabre Нщг Вы ошибаетесь. Это не вектор, который вставлен. Это значения введенного списка инициализаторов. –

+0

У меня все еще есть сомнения, и вы, очевидно, не испытывали этого, потому что это 'nodes [i] .insert (узлы [I] .end(), {i/c, i% c, -1, -1, 0}); 'не компилируется (' I' не объявлен). Также 'nodes.insert (nodes.end(), {i/c, i% c, -1, -1, 0});' компилирует! –

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