Проходя векторуказатель на аргумент? - PullRequest
1 голос
/ 06 апреля 2011

Хорошо, поэтому я пытаюсь передать указатель на аргумент, подобный этому.

void function(vector<vector<int> > *i){
 vector<int> j;
 j.push_back(5);
 i->push_back(j);
}

И вызвать его с помощью function(&i)

Но когда я это сделаю, он говорит, что я [0] [0] равно 0, а не 5.

Почему это происходит?

Редактировать:

int main(){ 
vector<vector<int> > test;
function(&test);
cout << test[0][0];
}

Ответы [ 4 ]

3 голосов
/ 06 апреля 2011

Вы можете попробовать этот код:

void f(vector<vector<int> > *i)
{
   vector<int> j;
   j.push_back(5);
   i->push_back(j);
}
vector<vector<int> > i;
f(&i);
cout << i[0][0];

Выход:

5

Демо: http://ideone.com/hzCtV

Или, альтернативно, вы также можете передать по ссылке, как показано здесь: http://ideone.com/wA2tc

0 голосов
/ 06 апреля 2011

Вы должны использовать ссылки вместо указателей, если NULL не является приемлемым значением для указателя.Делая это, вы можете избежать проверки состояния указателя NULL, что поможет очистить синтаксис.

0 голосов
/ 06 апреля 2011

По крайней мере, на моей машине, это дает мне 5!

#include <vector>
#include <stdio.h>

using std::vector;

void vf(vector<vector<int> > * i) {
   vector<int> j;
   j.push_back(5);
   i->push_back(j);
}

int main() {
   vector<vector<int> > j;
   vf(&j);
   printf("c: %d\n",j[0][0]);
}
0 голосов
/ 06 апреля 2011

Я предполагаю, что вы вызываете свою функцию как function(test), а не function(&test), поскольку вторая не будет компилироваться. Ваш код в main неверен. Вы должны объявить тест как vector<vector<int> > test; (без *). В его текущей форме вы только что определили указатель на вектор без фактического выделения самого вектора. Если вы попытаетесь разыменовать этот указатель (вы пытаетесь сделать i->push_back(), вы будете вызывать неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...