манипулирование векторами, созданными с новым
Вопрос
Может ли кто-нибудь помочь с этим ...
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. Если вы решили перейти на связанный список, придется ли менять имя переменной, чтобы это отражать? Очевидно, ответ - нет. Р>