0

我有这个循环

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() 时,即使我插入 3 个对象,我也会得到 0。

4

2 回答 2

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;
}

当然,您可能会考虑更改您的容器。使用 astd::map会缩短您的代码并减少操作大型数据集所需的时间。

std::map<std::string, person> map1;
add(person *p) {
  map1[p->name] = *p;
}
于 2012-12-04T21:44:20.863 回答
0

当 vec1 从空开始时,for 循环不会运行。因此,您希望在 vec1 中至少有一个元素。如何添加这个:

vec1.push_back(*p);
for(int i=0;i<vec1.size();++i){//the rest}
于 2012-12-04T21:55:56.343 回答