如何根据向量中的值替换元素?

时间:2017-08-10 20:21:17

标签: c++ vector

向量replace中是否存在与erase相同的函数,就像BC一样。

以下代码行目前删除vector<double> activeDof; for (int i = 0; i < BC.size(); i++) { activeDof.erase(find(activeDof.begin(), activeDof.end(), BC[i])); } 中存在的任何值。

vector<double> activeDof; 
for (int i = 0; i < BC.size(); i++)
{
    replace(activeDof.begin(),activeDof.end(),BC[i],0);
}

这会减少我的矢量大小,并在以后弄乱我的代码。我想做的是用BC替换BC中的值。这样我的向量中仍然会有相同数量的元素。我尝试使用替换功能,如下所示。

Where ATD.Attendancedate >= Reg.enddate

我仍然收到错误消息&#34;替换&#34;。有关如何根据向量中的值替换元素的任何建议?

编辑:BC是另一个包含一些元素的向量。我想知道这个元素是否存在于向量activeDof中,如果它存在,我想把它变成0。

3 个答案:

答案 0 :(得分:2)

#include <algorithm>
using namespace std;

int main() {
   vector<double> activeDof {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
   vector<double> BC {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};

   for (auto d: BC)
      replace (activeDof.begin(), activeDof.end(), d, 0.0);

   for (auto a: activeDof)
      cout << a << "-";

   return 0;
}

产生这个输出:

0-0-0-0-0-0-7-8-

答案 1 :(得分:1)

中将'0'更改为'0.0'
replace(activeDof.begin(),activeDof.end(),BC[i],0);

答案 2 :(得分:1)

您的实际问题是您无法正确擦除元素,因为您没有正确擦除

替换是好策略,但如果可以正确删除元素则不需要

您可以修改代码,如下所述

#include<algorithm>
using namespace std;
vector<double> activeDof;
for (int i = 0; i < BC.size(); i++)

{
    activeDof.erase(std::remove(activeDof.begin(), activeDof.end(), BC[i])), activeDof.end());
    activeDof.shrink_to_fit();

}