I'm novice to C++.Recently,teacher tell us.vector::reserve() and vector::resize() has similar function.But recently,I met a strange question.Any help is appreciate.
The problem is that:
struct SumStruct {
int operator ()(int v1, int v2) {
return v1 + v2;
}
};
void test5()
{
vector<int> srcVec0;
srcVec0.push_back(3);
vector<int> srcVec1;
srcVec1.push_back(8);
vector<int> dstVec;
//use resize ok.
//dstVec.resize(2);
dstVec.reserve(2);
transform(srcVec0.begin(), srcVec0.end(), srcVec1.begin(), dstVec.begin(), SumStruct());
for_each(dstVec.begin(), dstVec.end(), [](const int & value) { cout << setw(4) << value; });
}
The problem is that. If you use dstVec.resize(2) ok,use dstVec.reserve(2) crash ,info as that(“vector iterator + offset out of range”).
I have google like
Choice between vector::resize() and vector::reserve()
Is “vector iterator + offset out of range” assertion useful at all?