Как я могу push_back данные в векторе через вектор :: указатель? - PullRequest
1 голос
/ 12 ноября 2010

Я хотел бы использовать вектор :: указатель, чтобы вставить туда данные push_back ..

int num;
vector<int> v;
vector<int>::pointer ptr;

ptr = &v[0];

ptr->push_back(num);  // fail
ptr.push_back(num);  // fail
ptr.push_back(&num);  // fail
*ptr.push_back(num);  // fail

Ничто не работает ... любые идеи будут оценены

Ответы [ 3 ]

4 голосов
/ 12 ноября 2010

Вы неправильно понимаете, что такое vector :: pointer .Это тип для указателя на элемент в векторе, а не для указателя на сам вектор.

Кроме того, мне не ясно, почему вы захотите сделать это, поскольку нотация . работает просто отличнои сохраняет указатель разыменования при каждом доступе.Если вы обнаружите, что печатаете vector<int> *vecPtr = new vector<int>;, сделайте глубокий вдох и спросите, почему вы не можете использовать RAII .

1 голос
/ 12 ноября 2010

в этом случае ptr является int*, а не указателем на vector<int>, поэтому он не может выполнять векторные операции. Когда вы делаете назначение:

ptr = &v[0];

вы назначаете указатель на адрес, содержащий целое число в v [0], а не назначаете ссылку на вектор. Чтобы сделать то, что вы хотите, вам нужно сделать следующее:

int num;
vector<int> v;
vector<int>* ptr;

ptr = &v;

ptr->push_back(num);
1 голос
/ 12 ноября 2010

Вы не можете.Вам необходимо использовать оригинальный векторный объект.

Если вы хотите иметь указатель на вектор, вы можете сделать следующее:

vector<int> v;
vector<int> *pointer = &v;

v.push_back(4);
pointer->push_back(3);

В качестве комментария введите типvector<int>::pointer в вашем коде должно быть int *.

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