2017-08-10 42 views
-2

是否有与replace的值相同的函数,如erase如何根据向量中的值替换元素?

以下代码行现在删除BC中存在的任何值。

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

这会减少我的矢量大小,并在以后出错我的代码。我想要做的是将BC中的值替换为零。这样我的矢量中的元素数量仍然相同。我尝试使用替换函数,如下所示。

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

我仍然在“替换”下面收到错误消息。有关如何根据矢量中的值替换元素的任何建议?

编辑:BC是另一个包含一些元素的向量。我想找出是否此元素是存在于载体activeDof和如果存在欲把这一0

+1

什么是'BC'在你的代码中提到您可以修复你的代码? –

+0

我觉得你把'BC'与'activeDof'混淆了?你正在执行替换元素的矢量'activeDof',但你期望'BC'的变化? “_我想要做的是用BC替换BC中的值_”? – Snps

+0

BC是另一个包含一些元素的向量 – user6771484

回答

1

更改“0”至“0.0”在

replace(activeDof.begin(),activeDof.end(),BC[i],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

你实际的问题是你是不是能够正确地删除元素,你是不是做删除正确

取而代之的是很好的策略,但如果你能删除元素不需要正确

下面

#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(); 

}