SỬ DỤNG VECTOR TRONG LẬP TRÌNH C++

Dẫn nhập

Ở bài học trước, tôi đã chia sẻ mang đến chúng ta có mang CON TRỎ TRỎ ĐẾN CON TRỎ(Pointers khổng lồ pointers) trong C++.

Lưu ý :Quý Khách bắt buộc tránh thực hiện con trỏ trỏ đến con trỏ trừ lúc không tồn tại giải pháp nào không giống.

Bạn đang xem: Sử Dụng Vector Trong Lập Trình C++

Hôm nay, bản thân đã giới thiệu đến các bạn một cách để áp dụng mảng hễ nhưng mà không bắt buộc thao tác vượt tinh vi bởi nhỏ trỏ, chính là Cơ phiên bản về std::vector.

Nội dung

Để hiểu gọi bài bác này rất tốt các bạn phải bao gồm kỹ năng và kiến thức cơ bạn dạng về:

Trong bài bác ta vẫn cùng khám phá những vấn đề:

Tổng quan tiền về lớp std::vectorCơ chế ngăn chặn nhỉ bộ nhớ của std::vectorMột số thao tác làm việc cùng với mảng thứ hạng std::vector

Tổng quan lại về lớp std::vector

Trong bài học kinh nghiệm LỚPhường DỰNG SẴN ARRAY, họ đã biết lớp std::array dùng làm giải quyết và xử lý gần như vấn đề về cai quản với thực hiện mảng tĩnh.

Tương tự, C++ cung ứng lớp std::vector cung cấp Việc làm việc với mảng rượu cồn an toàn cùng thuận lợi hơn. Với lớp std::vector, các bạn hoàn toàn có thể tạo ra các mảng hễ nhưng mà không cần phải cấp phép với thu hồi vùng ghi nhớ bằng cách thực hiện toán tử new cùng delete.

Để áp dụng lớp std::vector, bạn phải khai báo thư viện với namespace:

#include using namespace std;// không buộc phải cung cấp độ nhiều năm mảng trên thời gian biên dịchvector array;vector array2 = 9, 7, 5, 3, 1 ;vector array3 9, 7, 5, 3, 1 ;Giống như std::array, bài toán truy vấn những thành phần mảng rất có thể được thực hiện trải qua toán thù tử <> (ko kiểm soát phạm vi mảng) hoặc hàm at() (có kiểm tra phạm vi mảng):

array<1> = 5; // không soát sổ phạm vi mảngarray.at(1) = 5; // tất cả chất vấn phạm vi mảng

Cơ chế ngăn chặn rò rỉ bộ nhớ của std::vector

khi một thay đổi vector ra khỏi phạm vi được quan niệm, nó sẽ tự động hóa giải pđợi vùng lưu giữ nhưng nó nắm giữ. Điều này không chỉ là tiện nghi (vị chúng ta không phải từ bỏ làm điều đó), nó còn hỗ trợ ngăn đề phòng nhỉ bộ nhớ.

Xét hàm bên dưới đây:

void doSomething(bool earlyExit)int *array = new int<3> 1, 3, 2 ;if (earlyExit) // ra khỏi hàmreturn;delete<> array; // ngôi trường hòa hợp hàm thoát sớm, array sẽ không xẩy ra xóaTuy nhiên, ví như biến đổi array là dạng hình vector, bộ nhớ sẽ tiến hành giải phóng ngay trong lúc thoát ra khỏi hàm. Như vậy khiến cho std::vector ngăn chặn được vấn đề rò rỉ bộ lưu trữ.

Một số thao tác làm việc với mảng kiểu std::vector

Xem kích thước của mảng mẫu mã std::vector

Để xem size mảng tất cả bao nhiêu phần tử, thực hiện hàm size():

vector arr = 2, 5, 8, 3, 1 ;cout Output: 5

Ttuyệt thay đổi kích thước mảng mẫu mã std::vector

Thay thay đổi kích thước một mảng được cấp phép rượu cồn khôn xiết phức hợp. Tuy nhiên, điều đó vô cùng đơn giản dễ dàng đối với std::vector thông cù hàm resize():

#include #include using namespace std;int main(){vector array 2, 5, 8, 3, 1 ; // mảng 5 phần tửarray.resize(10); // thay đổi độ dài mảng thành 10 phần tửcout

*

Crúc ý: Lúc biến đổi kích thước mảng sdt::vector, các quý giá bộ phận hiện nay đã có được giữ nguyên. Các phần tử new được khởi sản xuất bởi giá trị mang định của kiểu dáng dữ liệu mảng.

Các vector hoàn toàn có thể được biến hóa form size nhằm nhỏ tuổi hơn:

vector array 2, 5, 8, 3, 1 ; // mảng 5 phần tửarray.resize(3); // 2 5 8, bộ phận đồ vật 4 trnghỉ ngơi đi có khả năng sẽ bị cắt bỏ

Dung lượng và size của std::vector

Không giống như mảng thường thì hoặc mảng dựng sẵn std::array (chỉ đựng form size mảng), std::vector cất nhì trực thuộc tính riêng biệt: kích cỡ (size) cùng dung lượng (capacity).

Kích thước (size) trả về con số bộ phận đang được sử dụng vào mảng.Dung lượng (capacity) trả về số lượng thành phần được cấp phát đến vector trong bộ lưu trữ.

Xem thêm: Nhà Ngoại Cảm Bích Hằng Nói Về Thai Nhi, Kỳ Iv Thế Giới Của

Ví dụ:

#include #include using namespace std;int main(){vector array;array = 0, 1, 2, 3, 4 ; // length = 5, cap = 5cout Output:

*

Ttốt thay đổi size một mảng khôn cùng tốn kém về mặt tính toán, vị vậy dung lượng (capacity) có mặt để bớt tphát âm việc cấp phép lại vùng ghi nhớ khi biến đổi kích thước mảng.

Chúng ta có thể cấp phép một dung tích (capacity) thuở đầu cho std::vector bởi hàm reserve():

vector array;array.reserve(5); // đặt dung lượng vector là 5

Hành vi ngnạp năng lượng xếp bên trên std::vector

Mặc dù std::vector hoàn toàn có thể được thực hiện như một mảng cồn, tuy thế nó cũng rất có thể được thực hiện nhỏng một ngăn xếp. Std::vector cung cấp 3 phương thơm thức:

push_back() thêm một trong những phần tử vào cuối vector.back() trả về giá trị của phần tử cuối vector.pop_back() xóa một trong những phần tử cuối vector.

Ví dụ:

#include #include using namespace std;void printStack(const vector &stack){for (const auto &element : stack)cout stack;stachồng.push_back(5); // push_back() thêm 1 phần tử vào cuối vectorprintStack(stack);stack.push_back(3);printStack(stack);stachồng.push_back(2);printStack(stack);// back() trả về quý hiếm của thành phần cuốicout Output:

*

Kết luận

Qua bài học kinh nghiệm này, bạn đã cố gắng được cơ phiên bản về Cơ phiên bản về std::vector vào C++. Vì std::vector cung ứng việc làm việc cùng với mảng cồn an ninh và dễ dàng hơn, buộc phải bạn nên áp dụng std :: vector vào hầu như những trường vừa lòng yêu cầu mảng động.

Trong bài tiếp theo sau, bản thân đã giới thiệu đến chúng ta các TRUYỀN ĐỊA CHỈ CHO HÀM(Passing arguments by address)vào C++.

Cảm ơn các bạn đang theo dõi và quan sát bài viết. Hãy còn lại comment hoặc góp ý của bản thân nhằm phát triển nội dung bài viết tốt rộng. Đừng quên “Luyện tập – Thử thách – Không hổ thẹn khó”.

Tải xuống


Tài liệu

Nhằm ship hàng mục tiêu học hành Offline của xã hội, Kteam hỗ trợ khả năng lưu trữ văn bản bài học kinh nghiệm Cơ bạn dạng về lớp Vector bên dưới dạng file PDF vào links bên dưới.

Ngoài ra, bạn có thể search thấy các tư liệu được đóng góp tự cộng đồng làm việc mục TÀI LIỆU trên tlỗi viện lltb3d.com.com

Đừng quên like với share để ủng hộ Kteam và người sáng tác nhé!

*

Thảo luận

Nếu các bạn bao gồm bất kỳ khó khăn hay thắc mắc gì về khóa đào tạo, đừng ngần ngại đặt thắc mắc vào phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP bên trên tlỗi viện lltb3d.com.com nhằm nhận ra sự cung cấp từ bỏ cộng đồng.

Leave a Reply

Your email address will not be published. Required fields are marked *