我目前正在阅读有关C ++ 11的书:“ Ray Lischner探索C ++ 11”。我喜欢它,因为我发现它在解释中非常有用且简单。 问题。这里的“清单13-2。局部变量定义”出现问题的地方:
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");
}
因此,如您在上面所看到的,代码是对整数向量进行排序。但是,当我在MSVC14.0上运行程序时,会出现断言对话框:“向量迭代器不可取消引用”。 int value{*iter}
。
iter = data.erase(iter);
的意义是什么?我的意思是返回值(这里返回值的意义是什么?我尝试写:data.erase(iter);
并在GCC上像魅力一样工作。)。
我在ideone上尝试了GCC上的代码,它工作正常!?
请帮助我。预先谢谢你。