我想使用std :: find的返回值,但它不会编译。
错误:不匹配'运营商=' in' it = __gnu_cxx :: operator!=>(((const __gnu_cxx :: __ normal_iterator> )(& std :: find< __ gnu_cxx :: __ normal_iterator>, 虚拟>(dummylist.std :: vector< _Tp,_Alloc> :: begin>(),dummylist.std :: vector< _Tp, _Alloc> :: end>(),((const Dummy )(& Dummy(tempArray [0])))))),((const __gnu_cxx :: __ normal_iterator> )(& dummylist.std :: vector< _Tp,_Alloc> :: end ())))'
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#define SIZEDATASET 1
using namespace std;
class Dummy
{
public:
Dummy(int Name)
{
this->Name = Name;
this->v0 = 0;
cout << "Hello, im new " << this->Name << endl;
}
~Dummy()
{
cout << "Im done " << this->Name << endl;
}
int Name;
int v0;
};
bool operator== (const Dummy &D0, const Dummy &D1)
{
return D0.Name == D1.Name;
}
void printClass(vector<Dummy>:: iterator D)
{
cout << "Name: " << (D)->Name << endl;
cout << "v0: " << (D)->v0 << endl;
return;
}
int main()
{
string str0 = "1;3;2;2;2;4;";
string str1 = ";";
string str2;
int ende = 0;
int start = 0;
int length = 0;
int tempArray[SIZEDATASET] = {0};
int _switch = 0;
int i;
vector<Dummy> dummylist;
vector<Dummy>:: iterator it;
Dummy *DummyTemp;
while((unsigned int)(ende = str0.find(str1,ende))!= std::string::npos)
{
length = ende - start;
str2 = str0.substr(start,length);
ende+= str1.size();
start=ende;
tempArray[_switch]= atoi(str2.c_str());
_switch++;
if((_switch%=SIZEDATASET) == 0)
{
for(i=0; i<SIZEDATASET; i++)
{
cout << tempArray[i] << " ";
}
cout << endl;
/*this line*/ if((it = find(dummylist.begin(),dummylist.end(),Dummy(tempArray[0])) != dummylist.end())) /* why u not work?*/
{
cout << "match " << endl;
it->v0++;
}
else
{
cout << "no match" << endl;
dummylist.push_back(Dummy(tempArray[0]));
DummyTemp = &(dummylist.back());
DummyTemp->v0++;
}
}
}
it = dummylist.begin();
while(it != dummylist.end())
{
printClass(it);
it++;
}
dummylist.clear();
return 0;
}
稍后程序将收到一串数据(str0)将其剪切并存储在临时(tempArray)中。 然后我检查(使用find)我是否已经获得具有相同名称的设置数据(tempArray [0]表示数据集的名称)。如果不是这种情况,我会创建一个包含数据的新类,并将其存储在向量(dummylist)中。如果我在向量中找到了一个具有相同名称的数据集,我想通过使用find()的返回值来更改向量中现有类的值。
函数find()返回一个迭代器,&#34;它&#34;是一个,所以我不知道为什么会出现错误。
抱歉我的英语。此致 星
编辑: 请注意,我不会像在这个post.
中那样与find()本身斗争答案 0 :(得分:1)
您的if语句包含错误:您正在尝试分配比较操作的结果,而不是比较分配的结果。变化:
if((it = find(dummylist.begin(),dummylist.end(),Dummy(tempArray[0])) != dummylist.end()))
要:
if((it = find(dummylist.begin(),dummylist.end(),Dummy(tempArray[0]))) != dummylist.end())