манипулирование векторами, созданными с новым - PullRequest
1 голос
/ 23 июня 2009

Может ли кто-нибудь помочь с этим ...

vector<unsigned int> *vVec = new vector<unsigned int>;
        vVec .reserve(frankReservedSpace);

        start = std::clock();
        for(int f=0; f<sizeOfvec; f++)
        {   //Populate the newly created vector on the heap
            vVec .push_back(pArray[f]);
        }

Я получаю: ошибка C2228: слева от .reserve должен быть класс / структура / объединение

Я создаю вектор с помощью оператора new, чтобы он не использовал функцию, в которой он создан Таким образом, это возвращает мне указатель на этот вектор в куче, а не на сам фактический векторный объект. поэтому он не позволит мне выполнить какой-либо из .reserve () push_backs. Я не могу обойти это, кто-нибудь может помочь?

Ответы [ 4 ]

9 голосов
/ 23 июня 2009

vVec - указатель на вектор. Поэтому вы должны использовать оператор косвенности (->) вместо точки (.)

vector<unsigned int> *vVec = new vector<unsigned int>;
vVec->reserve(frankReservedSpace);

start = std::clock();
for(int f=0; f<sizeOfvec; f++)
{  //Populate the newly created vector on the heap
   vVec->push_back(pArray[f]);
}
1 голос
/ 23 июня 2009

Используйте «->» вместо «.» vVec имеет тип указателя, поэтому вам нужно использовать operator -> для доступа к членам объекта, на который он указывает.

0 голосов
/ 23 июня 2009

Лично меня не волнует венгерская нотация, которую вы встроили в имя переменной. Я бы предпочел увидеть что-то более специфичное для домена и самодокументирующееся, чем vVec. Если вы решили перейти на связанный список, придется ли менять имя переменной, чтобы это отражать? Очевидно, ответ - нет.

0 голосов
/ 23 июня 2009

Инстерад

vVec.reserve(frankReservedSpace);

Вы хотите:

vVec->reserve(frankReservedSpace);
...