Chuyển tới nội dung

Tìm hiểu về thư viện Algorithm trong C++

algrorithm library c

Bài viết này mình sẽ chia sẻ về thư viện Algorithm, một trong số các thư viện cực kì hay ho của ngôn ngữ lập trình C++. Cùng tìm hiểu về nó nhé!

1. Thư viện Algorithm C++ là gì?

Chào bạn đọc, nếu bạn là người mới bắt đầu học lập trình, bạn sẽ nghe tới các thư viện trong lập trình. Thư viện là một bộ tài nguyên bất biến động, ở đây chính là source code. Thư viện cung cấp cho bạn các hàm tính năng được viết sẵn giúp bạn có thể triển khai lập trình nhanh và tốt hơn.

Giống như các thư viện String, Math . . . thư viện thuật toán – Algorithm trong C++ là một trong số các thư viện được sử dụng thường xuyên. Thư viện này cung cấp cho các bạn các hàm liên quan đến các thuật toán đơn giản. Ví dụ như hàm sắp xếp – sort, tìm min, max . . .

Các hàm trong thư viện Algorithm tác động trên một phạm vi nhất định là một giải ô nhớ có thể truy cập theo thứ tự, con trỏ. Ví dụ như mảng hoặc chuỗi.

Thư viện này có rất nhiều hàm khác nhau bao gồm các hàm tìm kiếm, thống kê, copy chỉnh sửa . . . Bạn có thể tham khảo toàm bộ các hàm tại cplusplus.com. Ở phần dưới của bài viết, mình sẽ liệt kê các hàm và cách dùng của một số hàm thông dụng nhất.

2. Các hàm thông dụng tron Algorithm Library

2.1 Hàm sắp xếp – sort

Thư viện thuật toán trong C++ cung cấp hàm giúp bạn thực hiện sắp xếp dãy số dạng mảng, vector trong C++ cực kì nhanh. Là một hàm được biên soạn sẵn, bạn chỉ cần áp dụng vào và sử dụng. Mặc định là sắp xếp tăng dần.

Cấu trúc hàm:  

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)

Trong đó:

  • First là phần tử đầu của dãy
  • Last là phần tử cuối cùng của dãy + 1 ( tức là nó sẽ sắp xếp từ vị trí bắt đầu đến trước phần tử last)
  • Comp (compare) là tham số giúp bạn chọn sắp xếp tăng hay giảm. Nếu bạn không truyền tham số này mặc định sẽ là sắp xếp tăng dần.
    Có 2 tham số để truyền: greater (dùng cho sắp xếp giảm) less (dùng cho sắp xếp tăng)

Ví dụ:

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int a[] = {7, 5, 3, 4, 6};
			
	sort(a, a + 5); // sắp xếp tăng dần ( a + 5 chỉ sort đến a[4]
	cout << "After sorting: ";

	for(int i = 0; i < 5; i++)
		cout << a[i] << " ";
	return 0;
}

2.2 Hàm swap

swap là hàm thực hiện hoán đổi giá trị giữa hai phần tử a và b một cách nhanh nhất. Hàm này có thể thực hiện cho nhiều kiểu dữ liệu khác nhau. Nhưng hai dữ liệu cần đổi chỗ cần cùng một loại. Thông thường ta thường sử dụng hàm này trong việc hoán đổi dữ liệu kiểu số (int, doube, . . .).

Cấu trúc:

template <class T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}

Cách sử dụng:

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int a = 5;
	int b = 6;
	swap(a,b);
        cout<<"a = :"<<a;
        cout<<"b = :"<<B;
	return 0;
}

Kết quả thu được sẽ là:
a = 6
b = 5

2.3 Hàm copy

Hàm copy dùng để copy dữ liệu từ dãy a sang dãy b. Tức là ta copy toàn dữ liệu trong danh sách một cách nhanh nhất. Có các tham số truyền vào để xác định các phần tử cần copy.

Cấu trúc hàm:

// copy algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::copy
#include <vector>       // std::vector
using namespace std;
int main () {
  int myints[]={10,20,30,40,50,60,70};
  vector<int> myvector (7);

  copy ( myints, myints+7, myvector.begin() );

  cout << "myvector contains:";
  for (vector<int>::iterator it = myvector.begin(); it!=myvector.end(); ++it)
    cout << ' ' << *it;

  cout << '\n';

  return 0;
}

Kết quả thu được sẽ là: 10 20 30 40 50 60 70

2.4 Hàm reverse

Reverse tiếng anh có nghĩa là đảo ngược, C++ hỗ trợ hàm này với mục đích đảo lộn vị trí phần tử trong dãy. Giả sử bạn có dãy đã sắp xếp theo chiều tăng dần, sử dụng hàm này dãy sẽ thành chiều giảm dần.

Ví dụ:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int a[] = {1, 2, 3, 4, 5};
	reverse(a, a + 5);
	cout << "After reversing: ";

	for(int i = 0; i < 5; i++)
		cout << a[i] << " ";
	return 0;
}

After reversing: 5 4 3 2 1

2.5 Hàm min, max

Hàm min, max có tác dụng trả về giá trị tương ứng là phần tử lớn nhất, nhỏ nhất trong hai số a, b truyền vào với cùng kiểu dữ liệu. Hàm này chúng ta có thể hoànn toàn tự định nghĩa được, tuy nhiên trong một số trường hợp thì sử dụng hàm được viết sẵn sẽ giúp bạn tiết kiệm rất nhiều thời gian.

Ví dụ cách sử dụng:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int a = 7;
	int b = 2;
	cout << "Min = " << min(a, b) << "; Max = " << max(a, b);
	return 0;
}

Kết quả:

Min = 2 ; Max = 7

Lời kết

Bài viết này mình đã tổng hợp mốt số hàm trong thư viện Algorithm được sử dụng nhiều nhất. Bạn có thể tham khảo thêm tại trang chủ của Cplusplus.

Những hàm trong thư viện này có thể sẽ rất hữu ích cho bạn, giúp bạn tiết kiệm được rất nhiều thời gian biến soạn mã nguồn và hoàn thiện, tối ưu hơn thuật toán của mình. Qua đây ta cũng nắm được một phần về cách sử dụng thư viện trong lập trình.

Lời cuối, cảm ơn bạn đã ghé thăm blog của mình. Cùng xem thêm các bài viết về lập trình, thuật toán khác của mình tại đây nhé!

Chúc bạn thành công!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *