I'm currently reading a book on C++11: "Exploring C++ 11 by Ray Lischner". I like it because I found it really useful and simple in explaining. The problem. Here "Listing 13-2. Local Variable Definitions" Where I get the issue:
int main() {
std::vector<int> data{ 10, 57, 23, 81, 7, 5, 24 }; // I removed the line below in order not everytime I enter code.
// data.insert(data.begin(), std::istream_iterator<int>(std::cin),
// std::istream_iterator<int>());
for (std::vector<int>::iterator iter{ data.begin() }, end{ data.end() }; iter != end; ) {
int value{ *iter };
std::vector<int>::iterator here{ std::lower_bound(data.begin(), iter, value) };
if (iter == here)
++iter; // already in sorted position
else {
// erase the out-of-position item, advancing iter at the same time.
iter = data.erase(iter);
data.insert(here, value);
}
}
for (std::vector<int>::iterator iter{ data.begin() }, prev{ data.end() }, end{ data.end() };
iter != end; ++iter) {
if (prev != data.end())
assert(not (*iter < *prev));
prev = iter;
}
std::cout << '{';
std::string separator{ " " };
for (int element : data)
{
std::cout << separator << element;
separator = ", ";
}
std::cout << " }\n";
std::cout << std::endl;
std::system("pause");
}
So as you can see above the code is to sort a vector of integers. But When I run the program on MSVC14.0 I get the assertion dialog: "Vector iterator not dereferenceable".
int value{*iter}
.What is the point in:
iter = data.erase(iter);
? I mean the return value (What is the point in the return value here? I tried writting:data.erase(iter);
and works on GCC like charm.).
I tried the very code on GCC on ideone and it works fine!?
Please help me. Thank you in advance.