关于stl的容器的一些有关问题
关于stl的容器的一些问题
[code=C/C++]
#include <iostream>
#include <LIST>
//#include <algorithm>
#include <STRING>
using namespace std;
struct A{
char ch;
int in;
}a;
int main()
{
list <A> list1;
list <A> ::iterator iter;
while(1)
{
cout < < "put_ch " < <endl;
cin> > a.ch;
if(a.ch!= 'w ')
{
cout < < "put_in " < <endl;
cin> > a.in;
}
else
break;
list1.push_back(a);
}
iter=list1.begin();
//iter=list1.begin()+2; //我想定位到begin后面两个的位置,不能直接用“list1.begin()+2”的形式,会报错
//iter=find(list1.begin(),list1.end,2) //用find函数来定位,也是不行的
for(int i=0;i <3;i++) //于是我很无奈的想到了用循环自加来定位……
{
++iter;
}
list1.erase(iter);
for(iter=list1.begin();iter !=list1.end();++iter)
cout < <(*iter).ch < < "\t " < <(*iter).in < <endl;
return 0;
}
[/code]
请重点看我用“//”注释起来的地方,因为参数是一个自定义类型,迭代器就不能用加法了,find函数也不能用了。编译的时候提示说什么运算符没有重载什么的。搞不懂
请问,怎么样可以让我用“//”注释起来的部分能正常通过编译,正常使用啊。
------解决方案--------------------
因为你的A类没有重载 == 运算符.
而且 2 是int 类型的,应该用 A类型的 来作为find 的操作数.
[code=C/C++]
#include <iostream>
#include <LIST>
//#include <algorithm>
#include <STRING>
using namespace std;
struct A{
char ch;
int in;
}a;
int main()
{
list <A> list1;
list <A> ::iterator iter;
while(1)
{
cout < < "put_ch " < <endl;
cin> > a.ch;
if(a.ch!= 'w ')
{
cout < < "put_in " < <endl;
cin> > a.in;
}
else
break;
list1.push_back(a);
}
iter=list1.begin();
//iter=list1.begin()+2; //我想定位到begin后面两个的位置,不能直接用“list1.begin()+2”的形式,会报错
//iter=find(list1.begin(),list1.end,2) //用find函数来定位,也是不行的
for(int i=0;i <3;i++) //于是我很无奈的想到了用循环自加来定位……
{
++iter;
}
list1.erase(iter);
for(iter=list1.begin();iter !=list1.end();++iter)
cout < <(*iter).ch < < "\t " < <(*iter).in < <endl;
return 0;
}
[/code]
请重点看我用“//”注释起来的地方,因为参数是一个自定义类型,迭代器就不能用加法了,find函数也不能用了。编译的时候提示说什么运算符没有重载什么的。搞不懂
请问,怎么样可以让我用“//”注释起来的部分能正常通过编译,正常使用啊。
------解决方案--------------------
因为你的A类没有重载 == 运算符.
而且 2 是int 类型的,应该用 A类型的 来作为find 的操作数.