Menu
CoddyTech

Chỉnh sửa thuật toán

Bài học 21 trên 23 trong khóa học C++ - Thư viện mẫu chuẩn của Coddy.

Trong bài học này, bạn sẽ tìm hiểu về các thuật toán sửa đổi có trong C++ STL.
Thuật toán sửa đổi được thiết kế để thay đổi giá trị của các phần tử bên trong một vùng chứa.


Chúng ta sẽ tìm hiểu các thuật toán sau:

  • copy()
  • fill()
  • move()
  • swap()
  • reverse()

Phương thức copy()

Phương thức copy() sao chép các phần tử từ phạm vi được xác định bởi hai trình lặp vào phạm vi bắt đầu từ trình lặp thứ ba.

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

Chúng ta đã dùng phương thức copy() để sao chép nội dung của vector v1 sang vector v2.


Phương thức fill()

Phương thức này gán một giá trị cho mọi phần tử trong phạm vi đã cho, được xác định bởi hai trình lặp.

vector<int> numbers(10); // tạo một vector rỗng gồm 10 phần tử

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

Phương thức move()

Phương thức này chuyển các phần tử từ vùng chứa hiện tại và trả về rvalue của nó.

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

Như bạn thấy, phương thức move() làm chuỗi trống đi nhưng trả về giá trị của nó, còn phương thức push_back() chèn giá trị đó vào vector.


Phương thức swap()

Phương thức này hoán đổi các phần tử của hai vùng chứa cùng kiểu.

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

Phương thức reverse()

Phương thức này đảo ngược thứ tự các phần tử trong một vùng chứa, cụ thể là trong phạm vi được xác định bởi hai trình lặp.

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

 

Tự làm thử

Bài học này không có thử thách code.

Tất cả bài học trong C++ - Thư viện mẫu chuẩn

Tự luyện tập: Trình biên dịch C++ online