манипулирование векторами, созданными с новым

StackOverflow https://stackoverflow.com/questions/1032131

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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. Я не могу обойти это, кто-нибудь может помочь?

Это было полезно?

Решение

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]);
}

Другие советы

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

Вместо вы хотите:

vVec.reserve(frankReservedSpace);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top