我有这个循环
for(int i=0;i<vec1.size();++i)
{
if(vec1[i]==*p)
{
vec1[i]=*p;
cout<<"element updated"<<endl;
}
else
{
cout<<"push_back"<<endl;
vec1.push_back(*p);
}
}
我在容器类中插入对象并且我重载了==来检查对象内部的两个参数,如果它们匹配,我想更新它们,如果它们不匹配,我想把它们放在矢量,但我似乎无法正确填充我的向量,当我做vec1.size()我得到0即使我插入3个对象。
答案 0 :(得分:1)
您的问题是您的if
您的搜索循环。您的if
永远不会被执行,因为您的循环体永远不会运行,因为您的.size()
永远不会大于0。
试试这个:
// UNTESTED
std::vector<person> vec1;
add(person *p) {
std::vector<person>::iterator it = std::find(vec1.begin(), vec1.end(), *p);
if(it == vec1.end())
vec1.push_back(*p);
else
*it = *p;
}
或者,如果你真的想手动编写循环代码:
// UNTESTED
std::vector<person> vec1;
add(person *p) {
int i;
for(i=0;i<vec1.size();++i) {
if(vec1[i] == *p)
break;
}
if(i == vec1.size())
vec1.push_back(*p);
else
vec1[i] = *p;
}
当然,您可以考虑更换容器。使用std::map
会缩短代码并减少操作大型数据集所需的时间。
std::map<std::string, person> map1;
add(person *p) {
map1[p->name] = *p;
}
答案 1 :(得分:0)
当vec1从空开始时,for循环不会运行。所以你想要在vec1中至少有一个元素开头。怎么样添加这个:
vec1.push_back(*p);
for(int i=0;i<vec1.size();++i){//the rest}