проблема скопировать оригинальный вектор в мой вектор - PullRequest
1 голос
/ 03 мая 2011

У меня есть вопрос:

если у меня есть:

void test (std::vector<int> *original)
{
    myvector = vector<int>();
    myvector.reserve(&original.size());
    copy(original.begin(),original.end(),back_inserter(myvector));
}

Я хочу скопировать вектор в исходный целевой вектор

У меня 3 ошибки:

Ошибка 1, ошибка C2228: слева от «.size» должен быть класс / структура / объединение
Ошибка 2 ошибка C2228: слева от .begin должен быть класс / структура / объединение
Ошибка 3 ошибка C2228: слева от .end должен быть класс / структура / объединение

почему ???

Ответы [ 5 ]

5 голосов
/ 03 мая 2011

Обратите внимание, что original - это указатель .Вы должны написать это так:

void test (std::vector<int> *original)
{
    myvector = vector<int>();
    myvector.reserve(original->size());
    copy(original->begin(), original->end(), back_inserter(myvector));
}

Указатели разыменовываются с ->, а не ..& означает «взять адрес».

3 голосов
/ 03 мая 2011

Использование:

//if you create a new vector object!
std::vector<int> myvector(original->begin(), original->end());

Или,

//if you want to populate an already created vector object!
myvector.clear(); //if you want to erase existing elements!
myvector.insert(myvector.end(), original->begin(), original->end());
1 голос
/ 03 мая 2011

Должно быть original->size(), original->begin(), original->end(). original - это необработанный указатель, вы не можете использовать . для него, используйте ->, чтобы получить "член указанного объекта".

0 голосов
/ 03 мая 2011

Кажется, здесь есть некоторая путаница с указателями.Вы передали указатель, поэтому следует разыменовать его с -> not.

0 голосов
/ 03 мая 2011

original - указатель - используйте original->size() original->begin() original->end()

Кроме того, myvector = vector<int>(); желательно заменить на myvector.clear();

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