2017-08-10 60 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(); 

}