修改算法
Coddy C++ 标准模板库 课程的第 21 课,共 23 课。
在本课中,你将学习如何修改 C++ STL 中的算法。
修改算法用于改变容器中元素的值。
我们将介绍以下算法:
copy()fill()move()swap()reverse()
copy() 方法
copy() 方法会将由两个指定迭代器确定的范围内的元素,复制到从第三个迭代器开始的范围中。
vector<int> v1 = {1, 2, 3};
vector<int> v2;
copy(v1.begin(), v1.end(), v2.begin());
for(auto value : v1)
cout << value << " ";Output:
1 2 3我们使用 copy() 方法将向量 v1 的内容复制到了向量 v2 中。
fill() 方法
此方法会用指定的值填充由两个迭代器确定的范围内的每个元素。
vector<int> numbers(10); // 创建一个包含 10 个元素的空 vector
fill(numbers.begin(), numbers.end(), 1);
for(auto value : numbers)
cout << value << " ";
cout << endl;
fill(numbers.begin(), numbers.end() - 3, 2);
for(auto value : numbers)
cout << value << " ";Output:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 1 1 1move() 方法
此方法会移动当前容器中的元素,并返回其右值。
vector<string> names;
string first = "John";
string second = "Max";
names.push_back(first);
names.push_back(move(second));
cout << first << endl;
cout << second << endl;
cout << names[1];Output:
John
Max如你所见,move() 方法会清空字符串,但会返回它的值,而 push_back() 方法会将该值插入向量中。
swap() 方法
此方法会交换两个同类型容器中的元素。
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";
cout << endl;
swap(v1, v2);
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";Output:
1 2 3 4 5 6
4 5 6 1 2 3reverse() 方法
此方法会反转一个容器中元素的顺序,更准确地说,是反转由两个迭代器确定的范围内元素的顺序。
vector<int> a = {1, 2, 3, 4, 5};
for(auto value : a)
cout << value << " ";
cout << endl;
reverse(a.begin(), a.end());
for(auto value : a)
cout << value << " ";Output:
1 2 3 4 5
5 4 3 2 1
亲手试试
这节课没有代码挑战。
C++ 标准模板库中的所有课
自己练习: C++ 在线编译器