Глубокая копия вектора <Point>myArr - PullRequest
4 голосов
/ 09 октября 2010

Чтобы сделать глубокую копию myArr,

vector <Point> myArr;

, где Point - класс с 2-мя членами в качестве членов,

Мне нужно сделать что-то особенное? или в порядке с

vector <Point> otherArr = myArr;

Мне нужно удалить некоторые точки в otherArr, но в то же время мне нужны все точки в myArr для последующего использования.

заранее спасибо

Ответы [ 3 ]

7 голосов
/ 09 октября 2010

См. Мелкие и глубокие копии и Эффективное C ++

Point не требует глубокого копирования. Как правило большого пальца "глубокое копирование "требуется, когда у класса есть члены-указатели.Класс Point имеет только два члена int, поэтому он не требует особых усилий для "глубокого копирования", нормальное или "мелкое копирование" вполне подойдет.На самом деле, не требуется для написания конструктора копирования для Point, стандартный или синтезированный, предоставленный компилятором, вполне подойдет.

Что касается вашего второго вопроса, послевыполняется строка

vector< Point > otherArr = myArr;

, otherArr и myArr - два независимых вектора.Операции (например, удаление некоторых элементов), выполняемые с одним из них, никак не влияют на другой.

1 голос
/ 09 октября 2010

То, что у вас есть, хорошо.Вектор имеет перегруженный оператор присваивания и конструктор копирования, который выполняет глубокое копирование.

1 голос
/ 09 октября 2010

Назначение должно быть в порядке.Это гарантирует, что все данные скопированы правильно.Просто убедитесь, что Точка является копируемой.

...