- 论坛徽章:
- 0
|
疑问一,find是如何使用重载的==的?
下面是代码:- 1 #include <string>
- 2 #include <list>
- 3 #include <algorithm>
- 4 #include <iostream>
- 5
- 6 struct MyType
- 7 {
- 8 int s;
- 9 int t;
- 10 double p;
- 11 };
- 12
- 13 bool operator==(const MyType a, const MyType b){
- 14 return (a.s == b.s);
- 15 }
- 16
- 17
- 18 using namespace std;
- 19
- 20 int main(){
- 21
- 22 MyType m1 = {4,9,1.0};
- 23
- 24 MyType m2 = {1,2,3.0};
- 25
- 26 list<MyType> l;
- 27 list<MyType>::iterator it;
- 28
- 29 l.push_back(m1);
- 30 l.push_back(m2);
- 31
- 32 it = find(l.begin(), l.end(), m2);
- 33
- 34 if(it == l.end()){
- 35 cout<<"not found"<<endl;
- 36 }else
- 37 cout<<(*it).p<<endl;
- 38 return 0;
- 39
- 40 }
复制代码 按我对==的定义,这样做,应该是查找不到的
但是运行结果确是打出了3.0,为什么呢?
疑问二,
当自定义数据类型是指针的时候- 6 struct MyType
- 7 {
- 8 int s;
- 9 int t;
- 10 double p;
- 11 };
- 12
- 18 using namespace std;
- 19
- 20 int main(){
- 21
- 24 MyType *m1 = new MyType;
- 25 MyType *m2 = new MyType;
- 26
- 27 m1->s = 1;
- 28 m1->t = 2;
- 29 m1->p = 3.0;
- 30
- 31 m2->s = 4;
- 32 m2->t = 5;
- 33 m2->p = 6.0;
- 34
- 35 list<MyType *> l;
- 36 list<MyType *>::iterator it;
- 37
- 38 l.push_back(m1);
- 39 l.push_back(m2);
- 40
- 41 it = find(l.begin(), l.end(), m2);
- 42
- 43 if(it == l.end()){
- 44 cout<<"not found"<<endl;
- 45 }else
- 46 cout<<(*it).p<<endl;
- 47 return 0;
- 48
- 49 }
复制代码 这里甚至不需要重载==,find也不会报错
而且运行结果是找到了m2
这两件事令我十分不解,请大家指点。
谢谢。 |
|