gpt4 book ai didi

C++ "vector iterator not dereferencable"在运行时

转载 作者:行者123 更新时间:2023-11-28 06:01:10 25 4
gpt4 key购买 nike

在执行这个简单的程序时,我发现在运行时,当我在 FIRST while 结束时键入 eof 时会发生错误。错误显示“ vector 迭代器不可取消引用”。那可能吗?迭代器在 while 循环之后声明!我仍然无法理解我拼写错误的内容。有人能帮我吗?附言。该程序应检查一个 vector 是否是另一个 vector 的前缀。谢谢你!这是主要功能:

   int main(){
vector<int> v1, v2;
cout << "1st vector: enter integers" << endl;
int i, j;
while (cin >> i){
v1.push_back(i);
}
cout << "2nd vector: enter integers" << endl;
while (cin >> j){
v2.push_back(j);
}
vector<int>::const_iterator i1 = v1.begin();
vector<int>::const_iterator i2 = v2.begin();
while ((*i1) && (*i2) && ((*i1) == (*i2))){
++i1; ++i2;
}
if ((*i1) && (*i2))
cout << "Vectors not compatible." << endl;
else
if (!(*i1))
cout << "The 1st vector is a prefix for the 2nd." << endl;
else
cout << "The 2nd vector is a prefix for the 1st." << endl;
return 0;
}

最佳答案

vector<int>不是以 null 结尾的 C 风格字符串。所以要检查一个迭代器是否到达末尾,你需要将它与末尾迭代器进行比较。所以而不是 (*i1) && (*i2)你应该写 (i1 != v1.end()) && (i2 != v2.end())在这两种情况下。同样适用于 !(*i1) .您应该将其更改为 i1 == v1.end() .

@RSahu 描述了您遇到的第一个问题。一旦你解决了第一个问题,你就会遇到我描述的问题。

要解决他描述的问题,您应该清除坏位并忽略 cin 中剩余的任何内容的缓冲区。在第二个 while 之前添加以下行循环:

cin.clear();
cin.ignore();

LIVE

关于C++ "vector iterator not dereferencable"在运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com