STL клонирует вектор - PullRequest
       4

STL клонирует вектор

5 голосов
/ 24 февраля 2011

Привет! Я с трудом пытаюсь скопировать вектор указателей на Point. У меня есть

vector<Point*> oldVector

и я хочу скопировать этот вектор в другой вектор. Поэтому я использовал конструктор копирования. Я сделал это таким образом

vector<Point*> newVector = vector<Point*>(oldVector.begin(),oldVector.end());

К сожалению, я получаю исключение / ошибку, если я запустил эту функцию.

несовместимые векторные интеграторы

В чем может быть проблема ??

EDIT Должна быть большая проблема с итераторами, кажется, что я не могу использовать итераторы вообще. Я хотел добавить два stl-вектора друг в друга, поэтому я использовал sth вот так

 vector<int> a, b;
    b.insert(b.end(), a.begin(), a.end());

и я получаю исключение / ошибку sama во время выполнения этой строки

enter image description here

Ответы [ 5 ]

18 голосов
/ 24 февраля 2011

Это будет либо

vector<Point*> *newVector = new vector<Point*>(oldVector.begin(),oldVector.end());

или

vector<Point*> newVector(oldVector.begin(),oldVector.end());

При создании объектов вы используете присваивание только при выделении из кучи. В противном случае вы просто помещаете аргументы конструктора в круглые скобки после имени новой переменной.

Кроме того, следующее намного проще:

vector<Point*> newVector(oldVector);
1 голос
/ 24 февраля 2011
vector<Point*> newVector = vector<Point*>(oldVector.begin(),oldVector.end());

Почему это?

Почему бы не это:

vector<Point*> newVector(oldVector.begin(),oldVector.end());

??. Последнее тем лучше!

Еще лучше,

vector<Point*> newVector(oldVector);
0 голосов
/ 24 февраля 2011

Поскольку исходный контейнер имеет идентичный тип, std::vector<Point*>, нет необходимости использовать конструктор диапазона;просто используйте конструктор копирования!

std::vector<Point*> newVector(oldVector);

Но это не главное.Главная проблема здесь - это общие указатели.Будьте предельно ясны с самими собой, кто владеет указанными данными.Будьте осторожны с двойным удалением!

0 голосов
/ 24 февраля 2011

Это должно работать (только что протестировано с std::vector<int> с). Должна быть какая-то другая проблема. Point имеет конструктор копирования?

0 голосов
/ 24 февраля 2011

Вы хотите

Vector<Point*> newVector(oldVector.begin(), oldVector.end());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...