我有一个带有一些值的矢量(3,3,6,4,9,6,1,4,6,6,7,3),我想用54或每6替换每个3例如a 1,等等。
所以我需要首先浏览向量,获取[i]值,搜索并用54替换每个3,但仍保持相关positions.std::set
vector::swap
是一个好方法吗?我甚至不知道如何开始这个:(
我不能使用push_back
,因为这不会保持正确的值顺序,因为这很重要。
请保持简单;我只是一个初学者:)
答案 0 :(得分:12)
这项工作的工具是std::replace
:
std::vector<int> vec { 3, 3, 6, /* ... */ };
std::replace(vec.begin(), vec.end(), 3, 54); // replaces in-place
<强> See it in action 强>
答案 1 :(得分:6)
您可以使用 replace 或 replace_if 算法。
<强> Online Sample: 强>
#include<vector>
#include<algorithm>
#include<iostream>
#include<iterator>
using namespace std;
class ReplaceFunc
{
int mNumComp;
public:
ReplaceFunc(int i):mNumComp(i){}
bool operator()(int i)
{
if(i==mNumComp)
return true;
else
return false;
}
};
int main()
{
int arr[] = {3, 3, 6, 4, 9, 6, 1, 4, 6, 6, 7, 3};
std::vector<int> vec(arr,arr + sizeof(arr)/sizeof(arr[0]));
cout << "Before\n";
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\n"));
std::replace_if(vec.begin(), vec.end(), ReplaceFunc(3), 54);
cout << "After\n";
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\n"));
return 0;
}
答案 2 :(得分:1)
您可以遍历列表中的每个元素。
std::vector<int> vec{3, 3, 6, 4, 9, 6, 1, 4, 6, 6, 7, 3};
for(int n=0;n<vec.size();n++)
if(vec[n]==3)
vec[n]=54;
答案 3 :(得分:0)
使用STL算法for_each
。它不需要循环,你可以使用函数对象一次性完成它,如下所示。
http://en.cppreference.com/w/cpp/algorithm/for_each
示例:
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
void myfunction(int & i)
{
if (i==3)
i=54;
if (i==6)
i=1;
}
int main()
{
vector<int> v;
v.push_back(3);
v.push_back(3);
v.push_back(33);
v.push_back(6);
v.push_back(6);
v.push_back(66);
v.push_back(77);
ostream_iterator<int> printit(cout, " ");
cout << "Before replacing" << endl;
copy(v.begin(), v.end(), printit);
for_each(v.begin(), v.end(), myfunction)
;
cout << endl;
cout << "After replacing" << endl;
copy(v.begin(), v.end(), printit);
cout << endl;
}
输出:
Before replacing
3 3 33 6 6 66 77
After replacing
54 54 33 1 1 66 77