Vectơ trong C++ Thư viện mẫu chuẩn (STL) kèm ví dụ

⚡ Tóm tắt thông minh

Vectơ trong C++ Đây là một mảng động từ Thư viện Mẫu Chuẩn (Standard Template Library) tự động thay đổi kích thước khi các phần tử được thêm hoặc xóa, lưu trữ các mục trong bộ nhớ liền kề để lập trình viên có thể truy cập và duyệt qua chúng bằng cách sử dụng các trình lặp.

  • 📦 Mảng động: A C++ Không giống như mảng tĩnh có kích thước cố định, vector tự động mở rộng hoặc thu hẹp.
  • 🧩 Tiêu đề và cú pháp: Bao gồm phần khai báo vector, sau đó khai báo vector. Tên dùng để lưu trữ các phần tử đã được định kiểu.
  • 🧭 Trình lặp: Các phương thức begin(), end(), cbegin() và cend() di chuyển giữa các phần tử của vector giống như con trỏ.
  • 🛠️ Bổ ngữ: Các phương thức push_back(), insert(), pop_back(), erase() và clear() thay đổi nội dung của vector.
  • 📐 Công suất: Các hàm size(), capacity(), max_size(), resize() và empty() dùng để báo cáo hoặc điều chỉnh dung lượng lưu trữ.
  • 🤖 Hỗ trợ AI: GitHub Copilot và các trợ lý AI tương tự xây dựng các phép toán vectơ từ một bình luận ngắn.

C++ Vector STL

Một C++ Vectơ?

A C++ Vector là một mảng động có khả năng tự động thay đổi kích thước. Việc thay đổi kích thước diễn ra sau khi một phần tử được thêm vào hoặc xóa khỏi vector. Bộ lưu trữ được xử lý tự động bởi container. Các phần tử của vector được lưu trữ trong bộ lưu trữ liền kề. Điều này cho phép C++ lập trình viên có thể truy cập và duyệt các phần tử vector bằng cách sử dụng trình lặp.

Việc chèn dữ liệu mới vào một vectơ được thực hiện ở cuối vectơ. Quá trình này mất một khoảng thời gian vi phân. Việc xóa một phần tử khỏi vectơ mất một khoảng thời gian hằng số. Lý do là vì không cần phải thay đổi kích thước của vectơ. Việc chèn hoặc xóa một phần tử ở đầu vectơ mất một khoảng thời gian tuyến tính.

Trước khi viết mã với vector, điều quan trọng là phải biết khi nào nên sử dụng vector làm container phù hợp.

Khi nào nên sử dụng Vector?

A C++ vector nên được sử dụng trong các trường hợp sau:

  • Khi xử lý các yếu tố dữ liệu thay đổi liên tục.
  • Nếu kích thước dữ liệu không được biết trước khi bắt đầu, vector sẽ không yêu cầu bạn thiết lập kích thước tối đa của vùng chứa.

Cách khởi tạo vectơ trong C++

Cú pháp của vectơ trong C++ là:

vector <data-type> name (items)

Như được hiển thị ở trên, chúng ta bắt đầu với từ khóa vector.

  • loại dữ liệu là kiểu dữ liệu của các phần tử sẽ được lưu trữ trong vectơ.
  • tên là tên của vectơ hoặc các phần tử dữ liệu.
  • mặt hàng Chỉ định số lượng phần tử cho dữ liệu vectơ. Tham số này là tùy chọn.

Khi một vector đã tồn tại, các iterator cung cấp cho bạn một cách thức giống như con trỏ để di chuyển qua các phần tử của nó.

Trình lặp lại

Mục đích của iterator là giúp chúng ta truy cập các phần tử được lưu trữ trong vector. Nó là một đối tượng hoạt động giống như con trỏ. Dưới đây là các iterator thông dụng được hỗ trợ bởi... C++ vectơ:

  • vector::begin(): nó đưa ra một trình vòng lặp trỏ đến phần tử đầu tiên của vectơ.
  • vector::end(): nó đưa ra một trình vòng lặp trỏ đến phần tử quá khứ của vectơ.
  • vectơ::cbegin(): Nó tương tự như `vector::begin()`, nhưng không có khả năng sửa đổi các phần tử.
  • vectơ::cend(): Nó tương tự như `vector::end()` nhưng không thể sửa đổi các phần tử của `vector`.

Ví dụ sau đây sẽ điền dữ liệu vào một vector và sau đó duyệt qua vector đó bằng cả các iterator có thể thay đổi và iterator cố định.

Ví dụ 1

#include <iostream> 
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;

	for (int a = 1; a <= 5; a++)

		nums.push_back(a);

	cout << "Output from begin and end: ";

	for (auto a = nums.begin(); a != nums.end(); ++a)

		cout << *a << " ";

	cout << "\nOutput from cbegin and cend: ";

	for (auto a = nums.cbegin(); a != nums.cend(); ++a)

		cout << *a << " ";

	return 0;
}

Đầu ra:

C++ Ví dụ 1 về đầu ra của bộ lặp vector

Đây là ảnh chụp màn hình của mã:

C++ Ví dụ mã 1 về bộ lặp vector

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng ta đọc và ghi vào bảng điều khiển.
  2. Bao gồm tệp tiêu đề vectơ trong mã của chúng tôi. Nó sẽ cho phép chúng ta làm việc với các vectơ trong C++.
  3. Bao gồm không gian tên std để sử dụng các lớp và hàm của nó mà không cần gọi nó.
  4. Gọi hàm main() để thêm logic của chương trình vào bên trong.
  5. { Đánh dấu sự bắt đầu phần thân của hàm main().
  6. Khai báo một vectơ có tên nums để lưu trữ một tập hợp các số nguyên.
  7. Hãy tạo một vòng lặp for để giúp chúng ta duyệt qua vector. Biến này sẽ giúp chúng ta duyệt qua các phần tử của vector, từ phần tử thứ 1 đến phần tử thứ 5.
  8. Đẩy các phần tử vào số vectơ từ phía sau. Đối với mỗi lần lặp, điều này sẽ thêm giá trị hiện tại của biến a vào vectơ, từ 1 đến 5.
  9. In một số văn bản trên bảng điều khiển.
  10. Sử dụng biến lặp a để lặp qua các phần tử của số vectơ từ phần tử đầu đến phần tử quá khứ. Lưu ý rằng chúng tôi đang sử dụng các vòng lặp vector::begin() và vector::end().
  11. In các giá trị được trỏ bởi biến lặp a trên bảng điều khiển cho mỗi lần lặp.
  12. In một số văn bản trên bảng điều khiển. \n là ký tự dòng mới, di chuyển con trỏ đến dòng mới để in từ đó.
  13. Sử dụng biến lặp để duyệt qua các phần tử của vector nums từ đầu đến phần tử sau phần tử cuối. Lưu ý rằng chúng ta đang sử dụng các bộ lặp vector::cbegin() và vector::cend().
  14. In các giá trị được trỏ bởi biến lặp a trên bảng điều khiển cho mỗi lần lặp.
  15. Hàm chính sẽ trả về một giá trị nếu chương trình chạy thành công.
  16. Phần cuối của hàm main().

Bổ ngữ

Công cụ sửa đổi được sử dụng để thay đổi ý nghĩa của kiểu dữ liệu đã chỉ định. Dưới đây là các sửa đổi phổ biến trong C++:

  • vectơ::push_back(): Công cụ sửa đổi này đẩy các phần tử từ phía sau.
  • vectơ::insert(): Để chèn các mục mới vào một vectơ tại một vị trí được chỉ định.
  • vectơ::pop_back(): Công cụ sửa đổi này loại bỏ các phần tử vectơ ở phía sau.
  • vectơ::xóa(): Nó được sử dụng để loại bỏ một loạt các phần tử khỏi vị trí được chỉ định.
  • vectơ::clear(): Nó loại bỏ tất cả các phần tử vector.

Ví dụ tiếp theo áp dụng các yếu tố điều chỉnh này theo trình tự để xem vectơ thay đổi như thế nào.

Ví dụ 2

#include <iostream>
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;
	
	nums.assign(5, 1);

	cout << "Vector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.push_back(2);
	int n = nums.size();
	cout << "\nLast element: " << nums[n - 1];

	nums.pop_back();

	cout << "\nVector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.insert(nums.begin(), 7);

	cout << "\nFirst element: " << nums[0];
	
	nums.clear();
	cout << "\nSize after clear(): " << nums.size();			
}

Đầu ra:

C++ Ví dụ về đầu ra của bộ điều chỉnh vectơ 2

Đây là ảnh chụp màn hình của mã:

C++ Ví dụ mã 2 về các bộ điều chỉnh vectơ

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm tệp tiêu đề vectơ trong mã của chúng tôi để sử dụng các chức năng của nó.
  3. Bao gồm không gian tên std để sử dụng các lớp của nó mà không cần gọi nó.
  4. Gọi hàm main(). Logic chương trình nên được thêm vào bên trong phần thân của nó.
  5. Phần bắt đầu của phần thân hàm main().
  6. Khai báo một vectơ có tên nums để lưu trữ một số giá trị nguyên.
  7. Lưu trữ 5 phần tử trong số vectơ. Mỗi cái có giá trị là 1.
  8. In một số văn bản trên bảng điều khiển.
  9. Sử dụng biến lặp a để lặp qua các phần tử của số vectơ.
  10. In các giá trị của số vectơ trên bảng điều khiển cho mỗi lần lặp.
  11. Thêm giá trị 2 vào cuối các số vectơ.
  12. Khai báo một biến số nguyên n để lưu trữ kích thước của các số vectơ.
  13. In giá trị cuối cùng của số vectơ cùng với văn bản khác. Nó sẽ trả về 2.
  14. Xóa phần tử cuối cùng khỏi số vectơ. 2 sẽ bị loại bỏ.
  15. In văn bản trên bàn điều khiển. \n di chuyển con trỏ đến dòng mới để in văn bản ở đó.
  16. Sử dụng biến lặp a để lặp qua các phần tử của số vectơ.
  17. In các giá trị của số vectơ trên bảng điều khiển cho mỗi lần lặp.
  18. Chèn giá trị 7 vào đầu các số vectơ.
  19. In giá trị đầu tiên của số vectơ cùng với văn bản khác. Nó sẽ trả về 7.
  20. Xóa tất cả các phần tử khỏi số vectơ.
  21. In kích thước của số vectơ cùng với văn bản khác sau khi xóa tất cả nội dung. Nó sẽ trả về 0.
  22. Phần cuối của hàm main().

Sức chứa

Sử dụng những thứ sau chức năng Để xác định dung lượng của một vectơ:

  • Kích cỡ() – Hàm này trả về số lượng phần tử trong một vectơ.
  • Max_size() – Nó trả về số lượng phần tử tối đa mà một vectơ có thể lưu trữ.
  • Dung tích() – Hàm này trả về dung lượng bộ nhớ đã được cấp phát cho một vector.
  • Thay đổi kích thước() – Chức năng này thay đổi kích thước vùng chứa để chứa n phần tử. Nếu kích thước hiện tại của vector lớn hơn n, các phần tử ở cuối vector sẽ bị xóa. Nếu kích thước hiện tại của vector nhỏ hơn n, các phần tử thừa sẽ được thêm vào cuối vector.
  • Trống() – Hàm này trả về true nếu vector rỗng. Ngược lại, nó trả về false.

Ví dụ cuối cùng này báo cáo và điều chỉnh dung lượng lưu trữ của một vectơ bằng cách sử dụng các hàm dung lượng đã nêu ở trên.

Ví dụ 3

#include <iostream> 
#include <vector> 
using namespace std;
int main() {
	vector<int> vector1;
	for (int x = 1; x <= 10; x++)
		vector1.push_back(x);
	cout << "Vector size: " << vector1.size()<< endl;
	cout << "Vector capacity: " << vector1.capacity() << endl;
	cout << "Maximum size of vector: " << vector1.max_size()<< endl;
	vector1.resize(5);
	cout << "Vector size after resizing: " << vector1.size() << endl;
	if (vector1.empty() == false)
		cout << "Vector is not empty"<<endl;
	else
		cout << "Vector is empty"<<endl;
	return 0;
}

Đầu ra:

C++ Ví dụ 3 về đầu ra của dung lượng vectơ

Đây là ảnh chụp màn hình của mã:

C++ Ví dụ mã 3 về dung lượng vectơ

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi để sử dụng chức năng của nó.
  2. Bao gồm tệp tiêu đề vectơ trong mã của chúng tôi để sử dụng các chức năng của nó.
  3. Bao gồm không gian tên std trong mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  4. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  5. Tạo một vector có tên vector1 để lưu trữ các số nguyên.
  6. Sử dụng vòng lặp for để tạo biến x có giá trị từ 1 đến 10.
  7. Đẩy các giá trị của biến x vào vector.
  8. In kích thước của vectơ cùng với văn bản khác trên bảng điều khiển.
  9. In dung lượng của vectơ cùng với văn bản khác trên bảng điều khiển.
  10. In số lượng mục tối đa mà vectơ có thể giữ cùng với văn bản khác trên bảng điều khiển.
  11. Thay đổi kích thước vectơ để chỉ chứa 5 phần tử.
  12. In kích thước mới của vectơ cùng với văn bản khác.
  13. Kiểm tra xem vectơ có trống không.
  14. In văn bản trên bảng điều khiển nếu vectơ không trống.
  15. Sử dụng câu lệnh khác để nêu những việc cần làm nếu vectơ trống.
  16. Văn bản để in trên bảng điều khiển nếu vectơ trống.
  17. Chương trình phải trả về giá trị sau khi hoàn thành thành công.
  18. Kết thúc phần thân hàm main().

Câu Hỏi Thường Gặp

Vector là một mảng động tự động thay đổi kích thước và biết kích thước của chính nó, trong khi mảng tích hợp sẵn có độ dài cố định được thiết lập tại thời điểm biên dịch. Vector quản lý bộ nhớ cho bạn; mảng thô thì không.

Sử dụng toán tử chỉ số, chẳng hạn như nums[0], để truy cập trực tiếp nhanh chóng. Hàm thành viên at(), giống như nums.at(0), thực hiện điều tương tự nhưng ném ra ngoại lệ out_of_range khi chỉ số không hợp lệ, làm cho nó an toàn hơn.

Khai báo một vectơ mà các phần tử của nó cũng là các vectơ, ví dụ: vectơ > lưới. Bạn có thể điều chỉnh kích thước bằng các hàm tạo hoặc push_back rows. Mỗi vectơ bên trong có thể phát triển độc lập, tạo cho bạn một ma trận linh hoạt, có thể thay đổi kích thước.

Vector lưu trữ các phần tử trong bộ nhớ liền kề với khả năng truy cập ngẫu nhiên nhanh, trong khi std::list là một danh sách liên kết đôi với khả năng chèn hoặc xóa nhanh ở bất kỳ đâu nhưng không có chỉ mục trực tiếp. Hãy lựa chọn dựa trên kiểu truy cập của bạn.

Bao gồm tiêu đề thuật toán và gọi std::sort với các iterator begin và end, như trong sort(nums.begin(), nums.end()). Theo mặc định, thứ tự sắp xếp là tăng dần; hãy truyền một bộ so sánh tùy chỉnh hoặc lớn hơn. () để sắp xếp theo thứ tự giảm dần.

Đúng vậy. Vector là một mẫu và có thể chứa bất kỳ loại dữ liệu nào, bao gồm chuỗi, các lớp tùy chỉnh, và thậm chí cả các vector khác. Khai báo kiểu phần tử bên trong dấu ngoặc nhọn, ví dụ như `vector`. hoặc vectơ .

Đúng vậy. Trợ lý lập trình AI có thể chuyển một lời nhắc ngắn hoặc bình luận thành mã vector hoạt động, bao gồm khai báo, vòng lặp push_back và lặp lại. Luôn xem xét lại các kiểu dữ liệu, giới hạn và cách xử lý dung lượng được đề xuất, vì AI có thể bỏ sót các yêu cầu cụ thể của dự án.

Vâng. Trợ lý GitHub Nó gợi ý việc khai báo vector, các lệnh push_back và insert, cũng như các vòng lặp iterator khi bạn gõ. Nó xử lý tốt các đoạn mã lặp đi lặp lại, mặc dù bạn vẫn nên kiểm tra chỉ mục, thay đổi kích thước và logic trước khi biên dịch.

Tóm tắt bài viết này với: