Как использовать функцию копирования в векторе? - PullRequest
0 голосов
/ 28 марта 2011

Я хочу скопировать коллекцию структур из одного вектора в другой вектор в mfc.

Моя векторная структура

     typedef  vector<CLog *> CLogData;

     typedef vector<CLog * > tLogData;

как скопировать TYPE CLog * из CLogData в tLogData?

С уважением,

Karthik

Ответы [ 3 ]

1 голос
/ 28 марта 2011

Оба типа одинаковы.Так что вы можете просто сделать

CLogData cl;
tLogData tl;
// todo: fill cl

tl = cl;
1 голос
/ 28 марта 2011

Если вам нужна мелкая копия указателей CLog*, используйте ответ, который дал МакГаки. Если вам нужна глубокая копия фактических данных, на которые указывают указатели CLog*, вам нужно сделать это вручную в цикле:

CLogData cl;
tLogData tl;
// fill cl
for(size_t i = 0; i < cl.size(); ++i){
  // invokes the copy ctor of CLog
  CLog* plog = new CLog(*cl[i]);
  tl.push_back(plog);
}
1 голос
/ 28 марта 2011

Чтобы скопировать один вектор в другой, вы можете использовать std::copy двумя способами:

1) изменить размер целевого вектора и скопировать с помощью итератора:

tlogData.clear();
tlogData.resize(CLogData.size());
std::copy(CLogData.begin(), CLogData.end(), tLogData.begin());

2) использовать back_inserter:

std::copy(CLogData.begin(), CLogData.end(), std::back_inserter(tLogData));

Но это копирует только указатели из одного вектора в другой - указатели указывают на одни и те же объекты в обоих векторах!


Если вы действительно хотите скопировать объекты, вам нужно создать новые:

size_t n = CLogData.size();
for (size_t i = 0; i < n; ++i) {
   tLogData.push_back(new CLog(*CLogData[i]));
}

Это работает, только если CLog имеет конструктор копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...