Vectơ trong C++ Thư viện mẫu chuẩn (STL) kèm ví dụ
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 xảy ra sau khi một phần tử được thêm hoặc xóa khỏi vectơ. Việc lưu trữ được xử lý tự động bởi container. Các phần tử của vectơ đượ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 của nó. Điều này cần một khoảng thời gian khác biệt. Việc loại bỏ một phần tử khỏi vectơ cần có thời gian không đổi. Lý do là không cần thay đổi kích thước vector. Việc chèn hoặc xóa một phần tử ở đầu vectơ mất thời gian tuyến tính.
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 của dữ liệu không được biết trước khi bắt đầu, vectơ sẽ không yêu cầu bạn đặt 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.
- Kiểu dữ liệu là kiểu dữ liệu của các phần tử được lưu trữ trong vectơ.
- Tên là tên của vectơ hoặc các phần tử dữ liệu.
- Các mục biểu thị số phần tử cho dữ liệu của vectơ. Tham số này là tùy chọ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. Đó là một đối tượng hoạt động giống như một con trỏ. Dưới đây là các vòng lặp phổ biến được hỗ trợ bởi C++ vectơ:
- vectơ:: bắt đầu(): nó đưa ra một trình vòng lặp trỏ đến phần tử đầu tiên của vectơ.
- vectơ:: 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ó giống như vector::begin(), nhưng nó không có khả năng sửa đổi các phần tử.
- vectơ::cend(): nó giống như vector::end() nhưng không thể sửa đổi các phần tử vectơ.
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ụ 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:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- 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.
- 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++.
- 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ó.
- Gọi hàm main() để thêm logic của chương trình vào bên trong.
- { Đánh dấu sự bắt đầu phần thân của hàm main().
- Khai báo một vectơ có tên nums để lưu trữ một tập hợp các số nguyên.
- Tạo vòng lặp for để giúp chúng ta duyệt qua vectơ. Biến sẽ giúp chúng ta lặp qua các phần tử vectơ, từ 1st để 5th yếu tố.
- Đẩ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.
- In một số văn bản trên bảng điều khiển
- 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().
- In các giá trị được trỏ bởi biến lặp an trên bảng điều khiển cho mỗi lần lặp.
- 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ừ đó.
- Sử dụng biến lặp để 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 trình vòng lặp vector::cbegin() và vector::cend().
- 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.
- Hàm chính sẽ trả về một giá trị nếu chương trình chạy thành công.
- Phần cuối của hàm main().
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:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- 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ó.
- Bao gồm tệp tiêu đề vectơ trong mã của chúng tôi để sử dụng nó chức năng.
- 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ó.
- 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ó.
- Phần bắt đầu của phần thân hàm main().
- Khai báo một vectơ có tên nums để lưu trữ một số giá trị nguyên.
- Lưu trữ 5 phần tử trong số vectơ. Mỗi cái có giá trị là 1.
- In một số văn bản trên bảng điều khiển
- Sử dụng biến lặp a để lặp qua các phần tử của số vectơ.
- In các giá trị của số vectơ trên bảng điều khiển cho mỗi lần lặp.
- Thêm giá trị 2 vào cuối các số vectơ.
- Khai báo một biến số nguyên n để lưu trữ kích thước của các số vectơ.
- 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.
- Xóa phần tử cuối cùng khỏi số vectơ. 2 sẽ bị loại bỏ.
- 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 ở đó.
- Sử dụng biến lặp a để lặp qua các phần tử của số vectơ.
- In các giá trị của số vectơ trên bảng điều khiển cho mỗi lần lặp.
- Chèn giá trị 7 vào đầu các số vectơ.
- 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.
- Xóa tất cả các phần tử khỏi số vectơ.
- 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.
- Phần cuối của hàm main().
Sức chứa
Sử dụng các hàm sau để xác định dung lượng của một vectơ:
- Kích cỡ() -Nó trả về số phần tử trong một vector.
- Max_size() -Nó trả về số lượng mục cao nhất mà một vectơ có thể lưu trữ.
- Công suất () –Nó trả về lượng không gian lưu trữ được phân bổ cho một vectơ.
- Thay đổi kích thước () –Nó thay đổi kích thước vùng chứa để chứa n mục. Nếu kích thước hiện tại của vectơ lớn hơn n, các mục phía sau sẽ bị xóa khỏi vectơ. Nếu kích thước hiện tại của vectơ nhỏ hơn n, các mục bổ sung sẽ được thêm vào phía sau vectơ.
- Trống () –it trả về true nếu vectơ trống. Ngược lại, nó trả về sai.
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:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- 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ó.
- 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ó.
- 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ó.
- 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.
- Tạo một vector có tên vector1 để lưu trữ các số nguyên.
- Sử dụng vòng lặp for để tạo biến x có giá trị từ 1 đến 10.
- Đẩy các giá trị của biến x vào vector.
- 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.
- 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.
- 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.
- Thay đổi kích thước vectơ để chỉ chứa 5 phần tử.
- In kích thước mới của vectơ cùng với văn bản khác.
- Kiểm tra xem vectơ có trống không.
- In văn bản trên bảng điều khiển nếu vectơ không trống.
- Sử dụng câu lệnh khác để nêu những việc cần làm nếu vectơ trống.
- Văn bản để in trên bảng điều khiển nếu vectơ trống.
- Chương trình phải trả về giá trị sau khi hoàn thành thành công.
- Kết thúc phần thân hàm main().
Tổng kết
- A C++ vector là một mảng động có khả năng tự động thay đổi kích thước khi một phần tử được thêm vào hoặc xóa khỏi nó.
- Việc lưu trữ một vectơ được xử lý tự động bởi vùng chứa.
- Các phần tử của vectơ được lưu trữ trong bộ lưu trữ liền kề để có thể truy cập sau đó duyệt qua bằng cách sử dụng các trình vòng lặp.
- Việc chèn dữ liệu mới vào một vectơ được thực hiện ở cuối vectơ.
- Việc chèn dữ liệu vào một vectơ mất một khoảng thời gian khác nhau.
- Việc loại bỏ một phần tử khỏi vectơ cần có thời gian không đổi.
- Việc chèn hoặc xóa một phần tử lúc đầu sẽ mất thời gian tuyến tính.
- Nên sử dụng vectơ khi xử lý các phần tử dữ liệu thay đổi nhất quán.
- Ngoài ra, bạn có thể sử dụng vectơ nếu kích thước của dữ liệu không được biết trước khi bắt đầu.