
二维容器中如何vctor删除重复的元素?
我有一个二维容器,其中有很多重复的数据,请问应该怎么删除。我自己写的代码编译可以通过,但是运行的时候总包错(verctoriteratornotdereferencabl...
我有一个二维容器,其中有很多重复的数据,请问应该怎么删除。我自己写的代码编译可以通过,但是运行的时候总包错(verctor iterator not dereferencable)。
vector<vector<double> > ver;
ver.resize(0,vector<double>(3)); //3个double数值一一对应判断是否相等,若全部相等则删除
vector<double>::iterator iter1_0,iter1_1,iter1_2,iter2_1,iter2_2;
for ( iter1 ; iter1 != ver.end(); iter1 ++)
{
iter1_0 = (*iter1).begin();
iter1_1 = iter1_0 + 1;
iter1_2 = iter1_0 + 2;
for ( iter2 = iter1 + 1; iter2 != ver.end();)
{
iter2_0 = (*iter2).begin();
iter2_1 = iter2_0 + 1;
iter2_2 = iter2_0 + 2;
if ( *iter1_0 == *iter2_0 )
{
if ( *iter1_1 == *iter2_1 )
{
if ( *iter1_2 == *iter2_2 )
{
ver.erase(iter2);
}
else
{
iter2++;
}
}
else
{
iter2++;
}
}
else
{
iter2++;
};
}
} 展开
vector<vector<double> > ver;
ver.resize(0,vector<double>(3)); //3个double数值一一对应判断是否相等,若全部相等则删除
vector<double>::iterator iter1_0,iter1_1,iter1_2,iter2_1,iter2_2;
for ( iter1 ; iter1 != ver.end(); iter1 ++)
{
iter1_0 = (*iter1).begin();
iter1_1 = iter1_0 + 1;
iter1_2 = iter1_0 + 2;
for ( iter2 = iter1 + 1; iter2 != ver.end();)
{
iter2_0 = (*iter2).begin();
iter2_1 = iter2_0 + 1;
iter2_2 = iter2_0 + 2;
if ( *iter1_0 == *iter2_0 )
{
if ( *iter1_1 == *iter2_1 )
{
if ( *iter1_2 == *iter2_2 )
{
ver.erase(iter2);
}
else
{
iter2++;
}
}
else
{
iter2++;
}
}
else
{
iter2++;
};
}
} 展开
3个回答
展开全部
你好!
上面几位大牛已经说到原因了,我来说下解决方法。
使用erase函数的时候要特别小心,使用方法应该如下:iter2 = ver.erase(iter2);
因为按照你的代码的意思,删除之后,迭代器指向删除元素的后一元素,但是erase函数里面并没有完成后移的工作,而是用了返回下一元素迭代器的方式。
希望我的回答能对你有所帮助!
如果满意记得采纳为最佳答案哦!~
如果还有问题,可以BaiduHi我,O(∩_∩)O~!
上面几位大牛已经说到原因了,我来说下解决方法。
使用erase函数的时候要特别小心,使用方法应该如下:iter2 = ver.erase(iter2);
因为按照你的代码的意思,删除之后,迭代器指向删除元素的后一元素,但是erase函数里面并没有完成后移的工作,而是用了返回下一元素迭代器的方式。
希望我的回答能对你有所帮助!
如果满意记得采纳为最佳答案哦!~
如果还有问题,可以BaiduHi我,O(∩_∩)O~!
展开全部
stl算法库里面的unique
#include <algorithm>
你查查
#include <algorithm>
你查查
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Visual C++ .NET技术内幕(第6版)
本书特色: ·既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。 ·在讲解的时候语言简洁不啰嗦 ·作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。本书新增内容(主要是与第四版相比较) ·本书的前三部分内容主?...
Visual C++6.0入门与提高
本书全面讲解了Visual C++ 6.0应用程序开发方面的内容,包括集成开发环境IDE、C++语言的基本语法和面向对象技术、微软基础类库(MFC)、MFC应用程序框架、AppWizard和ClassWizard的使用方法、各种对话框的使用方法、常用窗体控件和高级控件的详细用途及其使用方法、 ...
Visual C++6.0 程序设计从入门到精通(附CD-ROM光盘一张)
本书首先从Visual C++6.0的基础知识入手,详细介绍了Visual C++6.0的操作环境和应用程序的基本框架,然后按照由易到难、由浅入深地顺序介绍了用Visual C++6.0开发Windows程序的方法,包括菜单和加速键、对话框、常用控件、文本和字体类、图形图像、文件操作、多线程 ...
本书特色: ·既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。 ·在讲解的时候语言简洁不啰嗦 ·作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。本书新增内容(主要是与第四版相比较) ·本书的前三部分内容主?...
Visual C++6.0入门与提高
本书全面讲解了Visual C++ 6.0应用程序开发方面的内容,包括集成开发环境IDE、C++语言的基本语法和面向对象技术、微软基础类库(MFC)、MFC应用程序框架、AppWizard和ClassWizard的使用方法、各种对话框的使用方法、常用窗体控件和高级控件的详细用途及其使用方法、 ...
Visual C++6.0 程序设计从入门到精通(附CD-ROM光盘一张)
本书首先从Visual C++6.0的基础知识入手,详细介绍了Visual C++6.0的操作环境和应用程序的基本框架,然后按照由易到难、由浅入深地顺序介绍了用Visual C++6.0开发Windows程序的方法,包括菜单和加速键、对话框、常用控件、文本和字体类、图形图像、文件操作、多线程 ...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询