首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

用vector储存自定义类型需满足什么条件,才能用vector运算比较符

2013-07-08 
用vector存储自定义类型需满足什么条件,才能用vector运算比较符?cout(vec1vec2)endl 上面的一句编

用vector存储自定义类型需满足什么条件,才能用vector运算比较符?
   cout<<(vec1==vec2)<<endl; 
上面的一句编译失败,刚学vector容器,也不知道错在哪里,在书上和百度也找不到答案,求指出错误
之处。
如题,还恳请讲清楚:
       用vector存储自定义类型需满足什么条件,才能用vector运算比较符?

#include <iostream>
#include <vector>
using namespace std;
 class A
 {
 public: 
 A(){}
 A(int val):x(val){}
 private:
 int x;

 };

int main ()
{
   A a(1),b(2);
   vector<A> vec1;
   vector<A> vec2;
   vec1.push_back(a);
   vec2.push_back(b);
   cout<<(vec1==vec2)<<endl; 
   return 0;
}
vector存储自定义类型 vector运算比较符 满足什么条件
[解决办法]
当使用==比较两个STL(vector)容器的时候,会先检查两个容器size是否相等,如果相等最终会调用到下面的代码:

template<class _InIt1,class _InIt2> 
inlinebool _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
{
   for (; _First1 != _Last1; ++_First1, ++_First2)
if (!(*_First1 == *_First2)) return (false);

return (true);
}
可以看到,它会逐个遍历比较两个容器的元素。所以:
1. 对于内置类型(int,double),我们不需要做什么,因为已经支持彼此的比较(==)操作。
2. 对于自定义类型,我们就得提供自己的 == 重载了。

所以,你应该这么改:
 class A
 {
 public: 
 A(){}
 A(int val):x(val){}
 friend bool operator == (const A& one, const A& two)
 {
    return (one.x == two.x) ? true : false;
 }   
 private:
 int x;

 };
[解决办法]
bool operator==(const A& other)const

作为成员的operator==应该声明为const.






引用:
Quote: 引用:

2. 对于自定义类型,我们就得提供自己的 == 重载了。

所以,你应该这么改:
 class A
 {
    ......
    friend bool operator == (const A& one, const A& two)
    {
    return (one.x == two.x) ? true : false;
     }   
  .....

 };


 上面的该法确实成功了,可为何下面的该法就失败了呢?能否再解释一下?
 class A
 {
    ......
    bool operator==(const A& other)
     {
 return x==other.x;
     }
  .....

 }

热点排行