向量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。
答案 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();
}