如何解决C++ STL:如何复制向量迭代器?
我有以下代码,由于 read access violation
而失败:
#include <vector>
using namespace std;
vector<int>::iterator myIterator;
void foo(vector<int> vec) {
myIterator = vec.begin();
}
int main()
{
foo({ 10,20,30,40 });
*myIterator; // Here it fails.
return 0;
}
经过一些调试,我发现当函数 myIterator
完成时,foo()
变得无效。
那我做错了什么?
解决方法
vec
仅在 foo
的范围内定义。由于 myIterator
是指向 vec
的迭代器,因此它在 foo
之外不再有效。尝试取消引用此类迭代器会引发读取访问冲突。
您需要在某处定义 vec
(例如在 main
中),然后在 foo
中传递对它的引用,例如:
void foo(vector<int>& vec) {
myIterator = vec.begin();
}
int main() {
vector<int> vec = {10,20,30,40};
foo(vec);
*myIterator;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。