std::vector difference of behaviour between msvc and gcc on operator[] after reserve, which is right?
c++
Solution
The behavior is undefined. `reserve` only reserves memory, but doesn't affect the size of the container. Maybe you wanted to use `resize`?
std::vector<int> v;
v.resize(10);
for (int i = 0; i < 10; ++i)
{
v[i] = i * 2;
}
though in this case you could've written
std::vector<int> v(10);
for (int i = 0; i < 10; ++i)
{
v[i] = i * 2;
}
Alternatively, you could use `reserve` in concert with `push_back`:
std::vector<int> v;
v.reserve(10);
for (int i = 0; i < 10; ++i)
{
v.push_back(i * 2);
}
Problem
This snippet of code fails miserably using msvc (out of bound error) but appears to work fine with both gcc and clang. What is the correct behaviour ? ``` #include <iostream> #include <vector> int main() { std::vector<int> v; v.reserve(10); for (int i = 0; i < 10; ++i) { v[i] = i * 2; } for (int i = 0; i < 10; ++i) { std::cout << v[i] << " "; } std::cout << std::endl; return 0; } ```