在C++程序中使用的迭代器中未处理的异常

Exception Unhandeled in Iterators use in C++ Program

本文关键字:迭代器 未处理 异常 C++ 程序      更新时间:2023-10-16

错误消息是在使用向量迭代器删除向量内公共元素的程序中给出的。执行在显示矢量的包含元素之前停止。这有什么问题。使用的编译器是MSVC,我使用的是Visual Studio。 这个函数在main((中调用没有任何问题。

#include"sample.h"
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void ex_vector::prac_vector()
{
vector<int> vec;
int input = 0,i=0;
vector<int>::iterator iter, iter_end;
//INSERT Values inside a vector
while (i!=10)
{
cin >> input;
vec.push_back(input);
++i;
}
//PRINT the values inside the vector
std::cout << "nThe container has elements n";
iter = vec.begin();
iter_end = vec.end();
while (iter!=iter_end)
{
cout <<*iter++ << " ";
}
//DELETES the common values
iter = vec.begin();
iter_end = vec.end();
std::cout << "nDeleting common value in the vectorn";
vector<int>::iterator elem = vec.begin();
while (iter != vec.end())
{
while (elem  != vec.end()) //<--Issue raised
{
elem = find(iter + 1, vec.end(), *iter);
if (elem != vec.end())
{
elem=vec.erase(elem);
}
}
++iter;
}
//PRINT the OUTPUT
iter = vec.begin();
while (iter != iter_end)
{
std::cout << *iter++ << " ";
}
cout << "n ";
}

引发的错误对话框

错误指向此处的库

编辑 问题中的拼写错误现已修复

一些提示,可能会对您有所帮助:

vector<int> vec(10, 0);

有效地创建一个已经包含 10 个值为 0 的元素的 int-vector - 这是您的意图吗?我认为您真的想将最大元素数限制为 10 个 - 在这种情况下,您可能只使用数组。

vector<int>::iterator iter = vec.begin(), iter_end = vec.end();
//INSERT Values inside a vector
while (i!=10)
{
cin >> input;
vec.push_back(input);
++i;
}

这肯定会导致不兼容的矢量错误。因为当您之后通过调用push_back更改向量时,先前定义的迭代器变得不兼容。

专注于代码的删除部分,分配elem导致迭代器值无效(尤其是在未擦除时(时可能存在错误,但我们不知道您的函数find及其返回的内容。 但是,如果目的真的是在向量中查找重复项,您可以执行以下操作:

std::vector<int>::iterator i = vec.begin();
std::vector<int>::iterator j;
while (i != vec.end())
{
j = i + 1;
while ( j != vec.end())
{
if (*i == *j)
vec.erase(j);
j++;
}
i++;
}