写以下程序时出现vectot iterator is not increament错误、
-
for (auto i = matrix[0].begin(); i!=matrix[0].end(); ++i) { v.push_back(*i); for (auto it = v.begin();it!=v.end();++it) std::cout << *it; std::cout << std::endl; matrix[0].erase(i); }
指向vector或string中删除点之后的迭代器、引用和指针都会失效;
erase删除后,返回被删除元素之后的迭代器;故上述代码可改写为:
for (auto i = matrix[0].begin(); i!=matrix[0].end();) {
v.push_back(*i);
for (auto it = v.begin();it!=v.end();++it)
std::cout << *it;
std::cout << std::endl;
i=matrix[0].erase(i);
}