Menu
CoddyTech

修改算法

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 1

move() 方法

此方法会移动当前容器中的元素,并返回其右值。

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 3

reverse() 方法

此方法会反转一个容器中元素的顺序,更准确地说,是反转由两个迭代器确定的范围内元素的顺序。

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++ 在线编译器