简介
copy
//容器内指定范围的元素拷贝到另一个元素中去
replace
//将制定范围内的旧元素换为新元素
replace_if
//容器内指定范围的满足条件的元素替换为新元素
swap
//互换两个容器的元素
copy
copy(iterator begin,iterator end,iterator dest);
dest 表示目标容器起始迭代器
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i + 1);
}
vector<int> v2;
v2.resize(v1.size()); //提前开辟空间
copy(v1.begin(), v1.end(), v2.begin());
for_each(v2.begin(), v2.end(), print); //1 2 3 4 5 6 7 8 9 10
}
这个算法有点鸡肋,完全可以被重载的“ = ”运算符替代。
replace
函数原型
replace(iterator begin,iterator end, oldValue,newValue);
把指定区间的所有oldValue更换为NweValue
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
v1.push_back(3);
v1.push_back(1);
v1.push_back(2);
v1.push_back(1);
v1.push_back(2);
v1.push_back(1);
cout << "替换前:" << endl;
for_each(v1.begin(), v1.end(), print); //3 1 2 1 2 1
replace(v1.begin(), v1.end(), 1, 10); //把容器中所有的1都替换为10
cout << endl;
cout << "替换后:" << endl;
for_each(v1.begin(), v1.end(), print); //3 10 2 10 2 10
}
replace_if
函数原型
replace_if(iterator begin,iterator end, _pred,newValue);
按条件替换元素,满足条件的元素替换为指定元素
_pred--谓词
newValue 表示指定的元素
void print(int val)
{
cout << val << " ";
}
class Compare
{
public:
bool operator()(int v1)
{
return v1 > 2;
}
};
void test01()
{
vector<int> v1;
v1.push_back(3);
v1.push_back(1);
v1.push_back(2);
v1.push_back(1);
v1.push_back(2);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
//大于2的数替换为10;
cout << "替换前:" << endl;
for_each(v1.begin(), v1.end(), print); //3 1 2 1 2 4 5 6
replace_if(v1.begin(), v1.end(), Compare(), 10); //把容器中所有的1都替换为10
cout << endl;
cout << "替换后:" << endl;
for_each(v1.begin(), v1.end(), print); //10 1 2 1 2 10 10 10
}
swap
函数原型
swap(container c1,container c2);
c1、c2表示两个容器
swap对换两个容器的内容(两个容器必须是同一种容器)
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
v1.push_back(3);
v1.push_back(1);
v1.push_back(2);
v1.push_back(1);
v1.push_back(2);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
vector<int> v2;
v2.push_back(10);
v2.push_back(10);
v2.push_back(10);
v2.push_back(10);
v2.push_back(10);
v2.push_back(10);
v2.push_back(10);
cout << "交换前:" << endl;
for_each(v1.begin(), v1.end(), print); //3 1 2 1 2 4 5 6
cout << endl;
for_each(v2.begin(), v2.end(), print); //10 10 10 10 10 10 10
swap(v1, v2); //交换v1,v2
cout << endl;
cout << "-----------------------------------------------------" << endl;
cout << "交换后:" << endl;
for_each(v1.begin(), v1.end(), print); //10 10 10 10 10 10 10
cout << endl;
for_each(v2.begin(), v2.end(), print); //3 1 2 1 2 4 5 6
}