使用容器存储的时候,一定要注意里面存储的是对象和还是对象的指针,这两者是有区别的。如果是对象的话,在进行一个删除、查找Find操作的时候,会调用类的比较==运算符,旨在内容的比较,而如果是指针的话,则会判断是否是指向的一个对象。给出演示代码如下:
#include <string>
#include <memory>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
void test1()
{
string str1("abc");
string str2("123");
string str3("ABC");
vector<string> vecStr;
vecStr.push_back(str1);
vecStr.push_back(str2);
vecStr.push_back(str3);
string str4("ABC");
//vector<string>::iterator it = vecStr.begin();
//for (; it != vecStr.end(); it++)
//{
// if ((*it) == str4)
// {
// cout << "target occurs in test1" << endl;
// break;
// }
//}
vector<string>::iterator result = find(vecStr.begin(), vecStr.end(), str4);
if(result!= vecStr.end())
cout << "target occurs in test1" << endl;
}
void test2()
{
string* pStr1=new string("abc");
string* pStr2 = new string("123");
string* pStr3 = new string("ABC");
vector<string*> vecStr;
vecStr.push_back(pStr1);
vecStr.push_back(pStr2);
vecStr.push_back(pStr3);
string* pStr4 = new string("ABC");
//vector<string*>::iterator it = vecStr.begin();
//for (; it != vecStr.end(); it++)
//{
// if ((*it) == pStr4)
// {
// cout << "target occurs in test2" << endl;
// }
//}
//compare1
vector<string*>::iterator result = find(vecStr.begin(), vecStr.end(), pStr4);
if (result != vecStr.end())
cout << "target occurs in test2 compare1 method " << endl;
//compare2
vector<string*>::iterator it = vecStr.begin();
for (; it != vecStr.end(); it++)
{
if (string(*(*it))==string(*pStr4))
{
cout << "target occurs in test2 compare2 method" << endl;
}
}
delete pStr1;
delete pStr2;
delete pStr3;
delete pStr4;
}
int main()
{
cout << "begin test" << endl;
test1();
test2();
return 0;
}