在C++程序中使用的迭代器中未处理的异常
Exception Unhandeled in Iterators use in C++ Program
错误消息是在使用向量迭代器删除向量内公共元素的程序中给出的。执行在显示矢量的包含元素之前停止。这有什么问题。使用的编译器是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++;
}
相关文章:
- 在C++程序中使用的迭代器中未处理的异常
- 为什么"std::uninitialized_copy"通常取消对未初始化内存的迭代器的引用不是未定
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 类型不可知的抽象以使用相同的运行时接口处理正向和反向迭代器和范围?
- 为什么 2 个未初始化的 std::set::迭代器相等?
- 如何 safley 处理循环中的迭代器
- 自定义迭代器:如果 a 和 b 的行为不同,如何正确处理距离计算和相等比较
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- 处理文件行流迭代器
- 这个迭代器操作在 C++ 中是未定义的吗?
- 如何处理迭代器::d ifference_type,当你无法测量差异时
- 异常处理.一个人如何抛出迭代器
- 迭代器未按预期运行
- 迭代器unordered_map - 如何检查未初始化的元素
- 矢量迭代器未在整个矢量中循环
- 映射/设置迭代器未解除可绑定运行时错误
- 类成员向量上的迭代器未正确取消引用
- 奇怪的编译器错误,说明我的迭代器未定义
- 使用 -std=c++0x 会导致错误:“迭代器”未命名类型错误
- std::list 迭代器未分配