Safari
Safari

Reputation: 11935

problem copy original vector into my vector

i have a question:

if i have:

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

I want to copy a vector in my original target vector

I have 3 error:

Error 1 error C2228: left of '.size' must have class/struct/union
Error 2 error C2228: left of '.begin' must have class/struct/union
Error 3 error C2228: left of '.end' must have class/struct/union

why???

Upvotes: 1

Views: 453

Answers (5)

Sarfaraz Nawaz
Sarfaraz Nawaz

Reputation: 361312

Use:

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

Or,

//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());

Upvotes: 3

ColWhi
ColWhi

Reputation: 1077

There seems to be some confusion about pointers here. You have passed in a pointer, so should dereference it with -> not .

Upvotes: 0

Jesper
Jesper

Reputation: 206786

Note that original is a pointer. You have to write it like this:

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

Pointers are dereferenced with ->, not with .. & means "take the address of".

Upvotes: 5

Erik
Erik

Reputation: 91270

original is a pointer - use original->size() original->begin() original->end()

Also, myvector = vector<int>(); should preferably be replaced with myvector.clear();

Upvotes: 0

sharptooth
sharptooth

Reputation: 170489

Should be original->size(), original->begin(), original->end(). original is a raw pointer, you can't use . on it, use -> to get "member of the pointed-to object".

Upvotes: 1

Related Questions