Tiêu chuẩn :: bản đồ c ++

Trong bài học này, mình sẽ hướng dẫn các bạn cách sử dụng một số lớp container của STL. Trước các bài học trước đây, mình đã từng giới thiệu đến các bạn một lớp thuộc STL, đó là std. array (in an an array) or is std. chuỗi ký tự trong chương trình.

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
9 thư viện khá đơn giản có thể dùng để thay thế cho một mảng

Tuy nhiên, nhược điểm của tiêu chuẩn. mảng (còn là điểm yếu của mảng một chiều) là kích thước bộ nhớ được cấp phát là cố định. Do đó, khả năng khai báo thiếu số lượng phần tử hoặc dư thừa quá mức cần thiết thường xuyên xảy ra. Để giải quyết nhược điểm này, STL đã hỗ trợ chúng tôi sử dụng các loại vùng chứa khác để lưu trữ, xử lý các phần tử với kích thước vùng nhớ tự động thay đổi để phù hợp với yêu cầu của người dùng

Trước khi đi vào tìm hiểu các loại container của STL, chúng ta nên phân chúng ra thành 3 loại container khác nhau

  • Vùng chứa trình tự

    Trình tự chứa là tập hợp các lớp chứa mà nó duy trì trật tự của các thành phần bên trong vùng chứa. Một đặc điểm của bộ chứa trình tự là bạn có thể chọn ví dụ muốn chèn thêm phần tử vào bộ chứa. Một ví dụ điển hình là khi bạn thêm một phần tử vào một chiều, các phần tử còn lại vẫn giữ nguyên thứ tự của chúng như trước khi thêm

    Language language C++11 supply for them ta 6 sequence container. tiêu chuẩn. véc tơ, tiêu chuẩn. deque, tiêu chuẩn. mảng, tiêu chuẩn. danh sách, tiêu chuẩn. danh sách chuyển tiếp, tiêu chuẩn. basic_string

  • thùng chứa liên kết

    Associated container là các container được thiết kế kèm theo cơ chế tự động sắp xếp dữ liệu bắt đầu khi chúng được đưa vào container. Cơ chế tổ chức dữ liệu của các container này sẽ quyết định vị trí của các phần tử trong container. Thông thường, bộ chứa kết hợp thực hiện cho phép so sánh sử dụng toán tử <

    Một số biến thể kết hợp được sử dụng phổ biến là. tiêu chuẩn. thiết lập, tiêu chuẩn. bản đồ

  • Bộ điều hợp vùng chứa

    Bộ điều hợp vùng chứa là các vùng chứa được sử dụng cho các cấu trúc lưu trữ đặc biệt. tiêu chuẩn. ngăn xếp, tiêu chuẩn. xếp hàng,

Vùng chứa trình tự

tiêu chuẩn. véc tơ

Cũng giống như std. mảng, vectơ lưu trữ các phần tử liên tiếp nhau trên bộ nhớ ảo. Điều này có nghĩa là các phần tử trong std. véc tơ có thể truy cập thông qua các con trỏ có cùng kiểu dữ liệu với kiểu của std. véc tơ. Đặc điểm làm tiêu chuẩn. vector other with std. mảng là nó có thể tự động thay đổi kích thước vùng chứa khi các phương thức, các thuật toán được định nghĩa bên trong lớp std. vector được sử dụng

Khai báo một std. véc tơ

To use std. vector, chúng ta cần đưa thư viện vector vào tệp chương trình. Dưới đây là cú pháp khai báo cơ bản để tạo ra một đối tượng từ lớp tiêu chuẩn. véc tơ

std::vector< <data_type> > <vector_name>;

data_type của vector là một kiểu dữ liệu tổng quát, các bạn có thể chọn tùy chọn dựa trên mục đích lưu trữ của chương trình, nó có thể là một kiểu dữ liệu tích hợp sẵn, cũng có thể là kiểu dữ liệu cấu trúc do các . Mình lấy một ví dụ như sau

#include <vector>

std::vector<__int32> vecInt32;

Như vậy là chúng ta đã có một đối tượng của lớp std. vector may be save the numertypes

std::vector<__int32> vec1(); //gọi phương thức khởi tạo mặc định, khởi tạo kích thước container là 0.

std::vector<__int32> vec2(5); //gọi phương thức khởi tạo std::vector(size_t _Count) với giá trị truyền vào là 5, khởi tạo kích thước container là 5 phần tử kiểu __int32.

std::vector<__int32> vec3(vec2); //gọi phương thức khởi tạo std::vector(const std::vector &other), khởi tạo một container giống với container của vector other.
0 in container. Lúc này, container của vecInt32 vẫn chưa có bất kỳ phần tử nào, chúng ta có thể kiểm tra bằng cách sử dụng phương thức std. véc tơ. size() to check size of container

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;

Kết quả cho màn hình là 0 (tương ứng với 0 phần tử hiện có trong vùng chứa của vecInt32)

Một số phương thức khởi tạo cho các đối tượng của lớp std. véc tơ

Sau đây khi học đến phần lập trình hướng đối tượng C++, các bạn sẽ biết rằng một lớp có thể có một hoặc nhiều phương thức khởi tạo giá trị cho các thành phần dữ liệu bên trong lớp đó. tiêu chuẩn lớp học. vector has to more than 10 phương thức khởi tạo khác nhau

Tiêu chuẩn :: bản đồ c ++

Tuy nhiên, mình chỉ hướng dẫn các bạn sử dụng một số phương thức khởi tạo đơn giản. Ví dụ

std::vector<__int32> vec1(); //gọi phương thức khởi tạo mặc định, khởi tạo kích thước container là 0.

std::vector<__int32> vec2(5); //gọi phương thức khởi tạo std::vector(size_t _Count) với giá trị truyền vào là 5, khởi tạo kích thước container là 5 phần tử kiểu __int32.

std::vector<__int32> vec3(vec2); //gọi phương thức khởi tạo std::vector(const std::vector &other), khởi tạo một container giống với container của vector other.

Các phương thức khởi tạo còn lại ít được sử dụng

Use the method in class std. véc tơ

Sau khi các bạn khai báo (có thể khởi động hoặc không) một đối tượng của lớp std. vector, lúc này chúng ta có thể sử dụng các phương thức (các hàm bên trong lớp) trong lớp std. vector to thao tác với vùng chứa của đối tượng đó

sửa đổi

tiêu chuẩn. véc tơ. đẩy_back(const vector_type &value)

Khi mình viết std. véc tơ. push_back, các bạn có thể hiểu phương thức push_back được định nghĩa bên trong khối lệnh có tên vector, và vector được định nghĩa bên trong khối lệnh của std

Phương thức này cho phép thêm một phần tử vào sau phần tử có vị trí cuối cùng trong vùng chứa, phần tử mới được thêm vào sẽ trở thành phần tử chỉ có số cao nhất trong vùng chứa. Ví dụ

std::vector<__int32> vecInt32;
for (int i = 1; i <= 10; i++)
{
    vecInt32.push_back(i);
}

Mỗi lần sử dụng phương thức push_back, kích thước của container sẽ tăng lên 1. Nếu phần tử vượt quá kích thước của vùng chứa, vector sẽ tự động cấp phát lại vùng nhớ đủ để chứa tất cả các phần tử

tiêu chuẩn. véc tơ. pop_back()

This method name will delete a death section at the end of the end of the container. Ví dụ

std::vector<__int32> vecInt32;

for (int i = 1; i <= 10; i++)
{
	vecInt32.push_back(i);
}
//container = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

vecInt32.pop_back();
//container = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }

Nếu bạn sử dụng phương thức này khi vùng chứa của vector trống, Visual studio (trong chế độ Gỡ lỗi) sẽ thông báo chương trình vi phạm điều kiện của xác nhận trong phương thức

std::vector<__int32> vec1(); //gọi phương thức khởi tạo mặc định, khởi tạo kích thước container là 0.

std::vector<__int32> vec2(5); //gọi phương thức khởi tạo std::vector(size_t _Count) với giá trị truyền vào là 5, khởi tạo kích thước container là 5 phần tử kiểu __int32.

std::vector<__int32> vec3(vec2); //gọi phương thức khởi tạo std::vector(const std::vector &other), khởi tạo một container giống với container của vector other.
1

Tiêu chuẩn :: bản đồ c ++

tiêu chuẩn. véc tơ. chèn

Để sử dụng phương thức này, chúng ta cần sử dụng thêm STL Iterator, đến bài học về STL Iterator mình sẽ trình bày rõ hơn về phương thức này. Các bạn có thể hiểu đơn giản là một iterator cũng là một con trỏ, nó trỏ vào vùng chứa của std. vectơ giúp phương thức chèn định vị được xác định cần chèn phần tử

std::vector<__int32> vecInt32;
std::vector<__int32>::iterator iter;

//iter point to the begin of vecInt32
iter = vecInt32.begin();

//insert new element into vecInt32's container
vecInt32.insert(iter, 10);

//container = { 10 }

iter = vecInt32.end();
vecInt32.insert(iter, 20);

//container = { 10, 20 }

iter = vecInt32.begin() + 1;
vecInt32.insert(iter, 15);

//container = { 10, 15, 20 }

Kích thước của vùng chứa sẽ tự động thay đổi đủ để chứa tất cả các phần tử sau khi chèn

tiêu chuẩn. véc tơ. xóa (vị trí const_iterator)

Phương thức này cho phép xóa một phần tử tại vị trí được trỏ đến bởi vị trí trình lặp. Ví dụ

std::vector<int> myvector;

// set some values (from 1 to 10)
for (int i=1; i<=10; i++) 
	myvector.push_back(i);

// erase the 6th element
myvector.erase (myvector.begin()+5);

//container = { 1, 2, 3, 4, 5, 7, 8, 9, 10 }

truy cập phần tử

toán tử [chỉ số size_type]

Sử dụng toán tử [] cho vector sẽ trả về giá trị tại chỉ số chỉ số được truyền vào (Tương tự một mảng)

std::vector<int> myvector(10); //10 zero-initialized elements

for (int i = 0; i < myvector.size(); i++)
	myvector[i] = i;
	
std::cout << myvector[4] << std::endl;

Các bạn lưu ý chỉ số bắt đầu của vùng chứa cũng là 0 giống với một mảng

tiêu chuẩn. véc tơ. tại (chỉ số size_type)

Toán tử tương tự[]

std::vector<int> myvector(10); //10 zero-initialized elements

for (int i = 0; i < myvector.size(); i++)
	myvector[i] = i;
	
std::cout << myvector.at(4) << std::endl;

Dung tích

tiêu chuẩn. véc tơ. kích thước()

Phương thức kích thước trả về số lượng phần tử chứa trong vùng chứa của vector

#include <vector>

std::vector<__int32> vecInt32;
0
tiêu chuẩn. véc tơ. max_size()

Trả về số lượng phần tử tối đa mà vector có thể chứa, đồng nghĩa với kích thước vùng nhớ tối đa có thể cấp phát cho vùng chứa của vector

#include <vector>

std::vector<__int32> vecInt32;
1
tiêu chuẩn. véc tơ. dung tích()

Trả về kích thước bộ nhớ đã cấp phát cho vector của container

#include <vector>

std::vector<__int32> vecInt32;
2

Kích thước vùng nhớ được cấp phát cho vùng chứa thường sẽ lớn hơn số lượng phần tử mà vùng chứa chứa. Điều này đảm bảo khi người dùng thêm phần tử vào vùng chứa, vector sẽ không cần chi phí phát lại vùng nhớ mới

Mình vừa trình bày một số phương thức đơn giản thường được sử dụng bởi class std. véc tơ. Các bạn có thể tự mình tìm hiểu các phương thức khác nhau của class std. vector via path after

http. //www. cplusplus. com/tham khảo/vector/vector/

tiêu chuẩn. danh sách

tiêu chuẩn. list container mô phỏng lại cấu trúc danh sách liên kết đôi dữ liệu; . Trật tự của các phần tử được giữ bởi các kết nối giữa các cặp phần tử

Cấu trúc dữ liệu danh sách liên kết đôi cho phép người dùng thêm và xóa phần tử tại vị trí bất kỳ trong vùng chứa, nhưng không hỗ trợ truy cập ngẫu nhiên ngẫu nhiên

Khai báo một std. danh sách

To use std. danh sách, chúng ta cần đưa danh sách thư viện vào tệp chương trình. Dưới đây là cú pháp thông báo một đối tượng của lớp std. danh sách

#include <vector>

std::vector<__int32> vecInt32;
3

Trong ví dụ dưới đây mình tạo ra một std. list used to save the resource section

#include <vector>

std::vector<__int32> vecInt32;
4

Khởi tạo đối tượng của lớp std. danh sách

Cũng tương tự như class std. véc tơ, tiêu chuẩn. danh sách cũng có một số phương thức khởi tạo riêng. Một số phương thức khởi tạo thường được sử dụng như

#include <vector>

std::vector<__int32> vecInt32;
5

Use the method of layer std. danh sách

Dung tích

(Tường tự std. vectơ)

truy cập phần tử

Đối với danh sách liên kết đôi cấu trúc dữ liệu, chúng ta chỉ có thể truy xuất giá trị xuất ở vị trí đầu tiên và cuối cùng trong container, std. list Support for them ta 2 method query output

tiêu chuẩn. danh sách. đằng trước()

Phương thức trả về giá trị của phần tử đầu tiên trong vùng chứa danh sách

#include <vector>

std::vector<__int32> vecInt32;
6
tiêu chuẩn. danh sách. trở lại()

Ngược lại với phương thức ở trên, phương thức quay lại trả về giá trị của phần tử cuối cùng trong vùng chứa danh sách

#include <vector>

std::vector<__int32> vecInt32;
7

sửa đổi

tiêu chuẩn. danh sách. đẩy_back(const list_type &value)

Phương thức này cho phép thêm một phần tử vào sau phần tử có vị trí cuối cùng trong vùng chứa, phần tử mới được thêm vào sẽ trở thành phần tử chỉ có số cao nhất trong vùng chứa. Ví dụ

#include <vector>

std::vector<__int32> vecInt32;
8
tiêu chuẩn. danh sách. pop_back()

Delete the end of the end in list container. Ví dụ

#include <vector>

std::vector<__int32> vecInt32;
9

Phương thức std. danh sách. empty() used to check container of list has empty or not, if number of the element of list other 0, return false, return return true. (Các class container của STL đều có phương thức này)

tiêu chuẩn. danh sách. push_front(const list_type &value)

Reverse with std method. danh sách. push_back, this method used to add a section tử có cùng kiểu với danh sách vào vị trí đầu tiên trong vùng chứa

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
0
tiêu chuẩn. danh sách. pop_front()

Xóa một phần tử trong vùng chứa danh sách tại vị trí đầu tiên

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
1

hoạt động

tiêu chuẩn. danh sách. loại()

Phương thức này sẽ sắp xếp lại dữ liệu bên trong vùng chứa theo thứ tự tăng dần (mặc định là như vậy)

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
2

Các bạn cũng có thể thay đổi điều kiện so sánh của phương thức sắp xếp bằng cách tự tạo một hàm so sánh 2 phần tử cùng kiểu dữ liệu với danh sách. Ví dụ

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
3

Mình vừa liệt kê ra một vài phương thức thường dùng khi sử dụng std. danh sách. Các bạn có thể tìm hiểu thêm một số phương thức khác của std. list at path

http. //www. cplusplus. com/tham khảo/danh sách/danh sách/

Vì vậy, mình đã cùng các bạn tìm hiểu bộ chứa trình tự 2 trong bộ thư viện STL của ngôn ngữ C++. Do giới hạn thời gian và để đảm bảo hiệu quả của khóa học, các container tiếp theo mình sẽ đưa ra đường dẫn để các bạn tự tìm hiểu các phương thức trong từng lớp container. Cách tự tìm hiểu cũng giống như mình làm cùng các bạn ở trên

thùng chứa liên kết

tiêu chuẩn. bố trí

tiêu chuẩn. đặt là định nghĩa lớp của một định dạng chứa chỉ cho phép lưu trữ các phần tử có giá trị là duy nhất, phần tử có giá trị trùng lặp không được phép. Những phần tử được thêm vào vùng chứa sẽ được sắp xếp tự động dựa trên giá trị của chúng

[](http. //www. cplusplus. com/tham chiếu/bộ/bộ/)

Dưới đây là một đoạn chương trình mẫu sử dụng std. bố trí

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
4

tiêu chuẩn. bản đồ

tiêu chuẩn. bản đồ là lớp định nghĩa một loại vùng chứa được sử dụng để lưu trữ các phần tử theo cấu trúc kết hợp (key_value, mapped_value). Dữ liệu trong vùng chứa được sắp xếp dựa trên key_value, do đó key_value không bị trùng lặp. Với mỗi key_value sẽ ánh xạ tới một mapped_value duy nhất

http. //www. cplusplus. com/tham khảo/bản đồ/bản đồ/

Các bạn lưu ý khi sử dụng std. map, mỗi khi thêm phần tử vào vùng chứa thì phải thêm đủ một cặp giá trị. Language language C++ cung cấp cho chúng ta class std. pair giúp chúng ta nhóm 2 đối tượng có cùng kiểu dữ liệu (hoặc khác) thành cặp tương ứng với cặp của std. bản đồ

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
5

Một ví dụ về sử dụng std. bản đồ để quản lý thông tin nhân viên

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
6Bộ chuyển đổi vùng chứa

tiêu chuẩn. cây rơm

Ngăn xếp (hay còn gọi là ngăn xếp) là một dạng thùng chứa có cơ chế tổ chức lưu trữ dữ liệu đặc biệt. LIFO (Nhập sau xuất trước)

Tiêu chuẩn :: bản đồ c ++

Phần tử được thêm vào sau cùng sẽ được lấy ra đầu tiên

http. //www. cplusplus. com/tham chiếu/ngăn xếp/ngăn xếp/

Dưới đây là một ví dụ ứng dụng cách tổ chức lưu trữ cấu trúc ngăn xếp dữ liệu để chuyển đổi một số từ hệ thống phân tích sang hệ thống nhị phân

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
7

Cấu trúc ngăn xếp dữ liệu cấu trúc còn có nhiều ứng dụng thực tiễn, ví dụ tạo ra chuỗi trạng thái cho phép người dùng trở lại trạng thái trước đó (hoàn tác)

tiêu chuẩn. xếp hàng

Queue (hay còn gọi là queue) là một cấu trúc dữ liệu hoạt động ngược lại so với cấu trúc dữ liệu Stack. FIFO (Nhập trước xuất trước). Chúng ta thấy cấu trúc dữ liệu này khá nhiều trong thực tế, ví dụ như xếp hàng chờ mua hàng, những người đến trước sẽ được mua hàng trước và ra khỏi hàng chờ sớm nhất.

http. //www. cplusplus. com/tham chiếu/hàng đợi/hàng đợi/

Dưới đây là một ví dụ sử dụng std. xếp hàng

std::cout << "Size of vecInt32: " << vecInt32.size() << std::endl;
8

Tổng kết

Trong bài học này, mình đã hướng dẫn các bạn sử dụng một số lớp chứa thuộc Thư viện mẫu chuẩn (STL) và cách để tự tìm hiểu cách sử dụng chúng. Về mặt cơ bản, các class container chỉ là một tập thư viện thực thi các cấu trúc dữ liệu thường được sử dụng trong lập trình. Cấu trúc dữ liệu là cách thức tổ chức, định dạng dữ liệu trong bộ nhớ máy tính. Chọn đúng cấu trúc dữ liệu cho bất kỳ bài toán toán nào có thể giúp lập trình viên giải quyết vấn đề dễ dàng hơn