Cách sử dụng C ++ Vector

How Use C Vector



Giới thiệu

Mảng là một chuỗi các đối tượng giống nhau ở các vị trí bộ nhớ liên tiếp. Một mảng không thể tăng quặng giảm chiều dài. Một vectơ giống như một mảng, nhưng độ dài của nó có thể được tăng hoặc giảm. Do đó, một vectơ có nhiều phép toán hơn một mảng.

C ++ có nhiều thư viện, tất cả đều tạo thành Thư viện chuẩn C ++. Một trong những thư viện này là thư viện vùng chứa. Vùng chứa là một tập hợp các đối tượng và một số thao tác nhất định có thể được thực hiện trên tập hợp. Các vùng chứa C ++ có thể được nhóm thành hai bộ: vùng chứa trình tự và vùng chứa liên kết. Vùng chứa trình tự là vectơ, mảng (không phải cùng một mảng đã thảo luận trước đó), deque, forward_list và list. Đây là những tập hợp khác nhau (cấu trúc dữ liệu giống mảng) và mỗi tập hợp cung cấp sự cân bằng riêng biệt.







Bất kỳ lập trình viên nào cũng nên biết cách quyết định sử dụng một vectơ, một mảng, một deque, một forward_list hay một danh sách. Khi một lập trình viên cần một cấu trúc yêu cầu nhiều hoạt động hơn những phép toán được liên kết với một mảng thông thường, thì không nên sử dụng mảng thông thường.



Nếu nhiệm vụ liên quan đến việc chèn và xóa thường xuyên ở giữa chuỗi, thì nên sử dụng danh sách hoặc danh sách chuyển tiếp. Nếu nhiệm vụ liên quan đến việc chèn và xóa thường xuyên ở đầu hoặc cuối của một chuỗi, thì nên sử dụng một deque. Một vectơ nên được sử dụng khi các loại hoạt động này không được yêu cầu.



Bài viết này hướng dẫn bạn cách sử dụng vector C ++. Bạn sẽ cần một số kiến ​​thức về con trỏ, tham chiếu và mảng trong C ++ để hiểu được bài viết này.





Lớp và Đối tượng

Lớp là một tập hợp các biến và hàm hoạt động cùng nhau, trong đó các biến không được gán giá trị. Khi các giá trị được gán cho các biến, một lớp sẽ trở thành một đối tượng. Các giá trị khác nhau được cung cấp cho cùng một lớp dẫn đến các đối tượng khác nhau; nghĩa là, các đối tượng khác nhau có thể thuộc cùng một lớp nhưng có giá trị khác nhau. Tạo một đối tượng từ một lớp còn được gọi là khởi tạo đối tượng.

Thuật ngữ vectơ mô tả một lớp. Một đối tượng được tạo ra từ một vectơ có tên do người lập trình chọn.



Một hàm thuộc về một lớp là cần thiết để khởi tạo một đối tượng từ lớp đó. Trong C ++, hàm đó có cùng tên với tên của lớp. Các đối tượng khác nhau được tạo (khởi tạo) từ lớp có các tên riêng biệt được lập trình viên đặt cho từng đối tượng đó.

Tạo một đối tượng từ một lớp có nghĩa là xây dựng đối tượng; nó cũng có nghĩa là khởi tạo đối tượng.

Lớp vectơ

Lớp vectơ đã được xác định và nằm trong thư viện. Để sử dụng lớp vectơ, lập trình viên phải bao gồm tiêu đề vectơ trong tệp với chỉ thị tiền xử lý sau:

#bao gồm

Khi tiêu đề được bao gồm, tất cả các đặc trưng vectơ (thành viên dữ liệu và hàm thành viên) đều có thể truy cập được. Để sử dụng đối tượng đếm để xuất dữ liệu ra thiết bị đầu cuối (bàn điều khiển), tiêu đề đối tượng cũng phải được bao gồm. Để viết một chương trình với vectơ, tối thiểu phải bao gồm các tiêu đề sau:

#bao gồm
#bao gồm

Khởi tạo một vectơ

NSfoo[10];

Trên đây là phần khai báo mảng với tên foo và số phần tử là 10. Đây là mảng các số nguyên. Việc khai báo một vector cũng tương tự như vậy. Đối với một vectơ, số phần tử là tùy chọn, vì độ dài vectơ có thể tăng hoặc giảm.

Tại thời điểm này trong chương trình, lớp vectơ đã được định nghĩa trong thư viện và phần đầu đã được đưa vào. Vectơ có thể được khởi tạo như sau:

giờ::vectơ <NS>vtr(số 8);

Ở đây, vectơ là của hàm tạo đặc biệt. Loại dữ liệu mà vectơ sẽ giữ là int, trong dấu ngoặc nhọn. Thuật ngữ vtr là tên do người lập trình chọn cho vectơ. Cuối cùng, 8, trong dấu ngoặc đơn, là số nguyên dự kiến ​​mà vectơ sẽ có.

Thuật ngữ std là viết tắt của không gian tên tiêu chuẩn. Thuật ngữ này phải được theo sau bởi dấu hai chấm, trong ngữ cảnh này. Bất kỳ ai cũng có thể viết thư viện lớp vectơ của riêng mình và sử dụng nó. Tuy nhiên, C ++ đã có một thư viện chuẩn với các tên chuẩn, bao gồm cả vector. Để sử dụng tên chuẩn, tên chuẩn phải được đặt trước std ::. Để tránh nhập std :: mỗi lần trong chương trình cho một tên chuẩn, tệp chương trình có thể bắt đầu như sau:

#bao gồm
#bao gồm
sử dụng không gian tên std;

Quá tải một chức năng

Khi hai hoặc nhiều chữ ký chức năng khác nhau có cùng tên, tên đó được cho là quá tải. Khi một hàm được gọi, số lượng và kiểu đối số xác định hàm nào được thực thi.

Xây dựng một vectơ

Xây dựng một vectơ có nghĩa là khởi tạo (tạo) một đối tượng vectơ. Hàm khởi tạo được nạp chồng như sau:

tên vector

Điều này tạo ra một vectơ có độ dài bằng 0 và kiểu T. Câu lệnh sau tạo một vectơ có độ dài bằng 0 kiểu float với tên vtr:

vectơ<trôi nổi>vtr;

tên vectơ (n)

Điều này tạo ra một vectơ có n phần tử kiểu T. Một câu lệnh cho vectơ này với bốn phần tử float như sau:

vectơ<trôi nổi>vtr(4);

tên vectơ (n, t)

Điều này tạo ra một vectơ gồm n phần tử được khởi tạo với giá trị t. Câu lệnh sau tạo một vectơ gồm 5 phần tử, trong đó mỗi phần tử có giá trị 3,4:

vectơ<trôi nổi>vtr(5, 3,4);

Xây dựng với Khởi tạo

Một vectơ có thể được tạo (tạo) và khởi tạo cùng một lúc, theo một trong hai cách sau:

vectơ<trôi nổi>vtr= {1.1, 2,2, 3,3, 4.4};

Hoặc

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};

Lưu ý rằng không có dấu ngoặc đơn ngay sau tên đối tượng. Dấu ngoặc đơn được sử dụng ngay sau tên đối tượng sẽ có danh sách trình khởi tạo, như sau:

vectơ<trôi nổi>vtr({1.1, 2,2, 3,3, 4.4});

Một vectơ có thể được xây dựng và khởi tạo sau đó với danh sách bộ khởi tạo. Trong trường hợp này, dấu ngoặc đơn sẽ không được sử dụng:

vectơ<trôi nổi>vtr;
vtr= {1.1, 2,2, 3,3, 4.4};

vectơ V2 (V1)

Đây là một phương thức khởi tạo sao chép. Nó tạo ra một vectơ V2 như một bản sao của vectơ V1. Đoạn mã sau minh họa điều này:

vectơ<trôi nổi>vtr1(5, 3,4);
vectơ<trôi nổi>vtr2(vtr1);

Gán một vectơ trong quá trình xây dựng

Trong quá trình xây dựng, một vectơ trống có thể được tạo trong khi một vectơ khác được gán cho nó, như sau:

vectơ<trôi nổi>vtr1{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi>vtr2=vtr1;

Câu lệnh thứ hai tương đương với:

vectơ<trôi nổi>vtr2= {1.1, 2,2, 3,3, 4.4};

Véc tơ const

Vectơ const là một vectơ mà các phần tử của nó không thể thay đổi được. Các giá trị trong vectơ này là chỉ đọc. Khi được tạo, vectơ sẽ xuất hiện như sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};

Trong loại vectơ này, không thể thêm hoặc bớt phần tử nào. Hơn nữa, không có giá trị nào có thể thay đổi được.

Xây dựng với Iterator

Một mẫu cung cấp một đại diện chung cho một kiểu dữ liệu. Một trình lặp cung cấp một đại diện chung về việc quét qua các giá trị của một vùng chứa. Cú pháp để tạo một vectơ với một trình lặp như sau:

bản mẫu<class InputIterator>
vectơ(InputIterator đầu tiên,InputIterator cuối cùng,hăng sôNgười phân bổ& =Người phân bổ());

Điều này xây dựng một vectơ cho phạm vi [đầu tiên, cuối cùng) bằng cách sử dụng bộ cấp phát được chỉ định, sẽ được thảo luận ở phần sau của bài viết này.

Phá hủy một vectơ

Để hủy một vectơ, chỉ cần cho phép nó đi ra khỏi phạm vi và việc hủy được xử lý tự động.

Công suất vectơ

size_type dung lượng () const noexcept

Tổng số phần tử mà vectơ có thể chứa mà không yêu cầu phân bổ lại được trả về bởi hàm thành viên dung lượng. Một đoạn mã cho điều này như sau:

vectơ<trôi nổi>vtr(4);
NStrên một=vtr.sức chứa();
Giá cả<<trên một<< ' ';

Đầu ra là 4.

dự trữ (n)

Không gian bộ nhớ không phải lúc nào cũng có sẵn miễn phí. Không gian thêm có thể được đặt trước. Hãy xem xét đoạn mã sau:

vectơ<trôi nổi>vtr(4);
vtr.dự trữ(6);
Giá cả<<vtr.sức chứa() << ' ';

Kết quả đầu ra là 6. Vì vậy, không gian bổ sung được dự trữ là 6 - 4 = 2 phần tử. Hàm trả về giá trị void.

size () const noexcept

Điều này trả về số phần tử trong vectơ. Đoạn mã sau minh họa chức năng này:

vectơ<trôi nổi>vtr(4);
trôi nổiNS=vtr.kích thước();
Giá cả<<NS<< ' ';

Đầu ra là 4.

thu nhỏ để phù hợp với()

Sau khi cung cấp thêm dung lượng cho một vectơ có hàm Reserve (), vectơ có thể được giảm kích thước để phù hợp với kích thước ban đầu của nó. Đoạn mã sau minh họa điều này:

vectơ<trôi nổi>vtr(4);
vtr.dự trữ(6);
vtr.thu nhỏ để phù hợp với();
NSNS=vtr.kích thước();
Giá cả<<NS<< ' ';

Đầu ra là 4 chứ không phải 6. Hàm trả về giá trị void.

thay đổi kích thước (sz), thay đổi kích thước (sz, c)

Điều này thay đổi kích thước vectơ. Nếu kích thước mới nhỏ hơn kích thước cũ, thì các phần tử ở cuối sẽ bị xóa. Nếu kích thước mới dài hơn, thì một số giá trị mặc định sẽ được thêm vào cuối. Để có một giá trị cụ thể được thêm vào, hãy sử dụng hàm resize () với hai đối số. Đoạn mã sau minh họa việc sử dụng hai hàm này:

vectơ<trôi nổi>vtr1{1.1, 2,2, 3,3, 4.4};
vtr1.thay đổi kích thước(2);
Giá cả<< 'Kích thước mới của vtr1:' <<vtr1.kích thước() << ' ';
vectơ<trôi nổi>vtr2{1.1, 2,2};
vtr2.thay đổi kích thước(4, 8.8);
Giá cả<< 'vtr2:'<<vtr2[0] <<''<<vtr2[1] <<'
'
<<vtr2[2] <<''<<vtr2[3] << ' ';

Đầu ra như sau:

Kích thước mới của vtr1: 2
vtr2: 1,1 2,2 8,8 8,8

Các hàm trả về giá trị vô hiệu.

rỗng () const noexcept

Hàm này trả về giá trị 1 là true nếu không có phần tử nào trong vectơ và 0 là false nếu vectơ trống. Nếu một vectơ có 4 vị trí cho một loại dữ liệu cụ thể, chẳng hạn như float, không có bất kỳ giá trị float nào, thì vectơ đó không trống. Đoạn mã sau minh họa điều này:

vectơ<trôi nổi>vtr;
Giá cả<<vtr.trống() << ' ';
vectơ<trôi nổi>vt(4);
Giá cả<<vậy nêntrống() << ' ';

vectơ<trôi nổi>v(4,3.5);
Giá cả<<v.trống() << ' ';

Đầu ra như sau:

1
0
0

Quyền truy cập phần tử vectơ

Một vectơ có thể được tập lệnh con (được lập chỉ mục) giống như một mảng. Việc đếm chỉ số bắt đầu từ số không.

vectorName [i]

Hoạt động vectorName [i] trả về một tham chiếu đến phần tử tại iNSchỉ số của vectơ. Đoạn mã sau xuất ra 3.3 cho vectơ trên:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr[2];
Giá cả<<fl<< ' ';

vectorName [i] const

Hoạt động vectorName [i] const được thực thi thay vì vectorName [i] khi vector là một vector hằng. Thao tác này được sử dụng trong đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr[2];
Giá cả<<fl<< ' ';

Biểu thức trả về một tham chiếu không đổi đến iNSphần tử của vectơ.

Gán giá trị bằng chỉ số

Một giá trị có thể được gán cho một vectơ không hằng số, như sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vtr[2] = 8.8;
Giá cả<<vtr[2] << ' ';

Đầu ra là 8,8.

vectorName.at (i)

vectorName.at (i) giống như vectorName [i], nhưng vectorName.at (i) đáng tin cậy hơn. Đoạn mã sau cho biết cách sử dụng vectơ này:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr.tại(2);
Giá cả<<fl<< ' ';
tại()là một thành viên vectorhàm số.

vectorName.at (i) const

vectorName.at (i) const giống như vectorName [i] const, nhưng vectorName.at (i) const đáng tin cậy hơn. vectorName.at (i) const được thực thi thay vì vectorName.at (i) khi vector là một vector hằng. Vectơ này được sử dụng trong đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr.tại(2);
Giá cả<<fl<< ' ';
tại() hăng sôlà một thành viên vectorhàm số.

Gán giá trị bằng hàm at ()

Một giá trị có thể được gán cho một vectơ không hằng số với hàm at (), như sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vtr.tại(2) = 8.8;
Giá cả<<vtr[2] << ' ';

Đầu ra là 8,8.

Sự cố với Sub-Scripting

Vấn đề với tập lệnh con (lập chỉ mục) là nếu chỉ mục nằm ngoài phạm vi, số không có thể được trả về hoặc có thể xuất hiện lỗi trong thời gian chạy.

đằng trước()

Điều này trả về một tham chiếu đến phần tử đầu tiên của vectơ mà không xóa phần tử. Đầu ra của đoạn mã sau là 1.1.

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr.đằng trước();
Giá cả<<fl<< ' ';

Phần tử không bị xóa khỏi vectơ.

front () const

Khi cấu trúc vectơ được đặt trước bởi const, biểu thức front () const được thực thi thay vì front (). Điều này được sử dụng trong đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr.đằng trước();
Giá cả<<fl<< ' ';

Một tham chiếu không đổi được trả về. Phần tử không bị xóa khỏi vectơ.

mặt sau()

Điều này trả về một tham chiếu đến phần tử cuối cùng của vectơ mà không xóa phần tử. Đầu ra của đoạn mã sau là 4.4.

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr.mặt sau();
Giá cả<<fl<< ' ';

back () const

Khi cấu trúc vectơ được đặt trước bởi const, biểu thức back () const được thực thi thay vì back (). Điều này được sử dụng trong đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
trôi nổifl=vtr.mặt sau();
Giá cả<<fl<< ' ';

Một tham chiếu không đổi được trả về. Phần tử không bị xóa khỏi vectơ.

Quyền truy cập dữ liệu vectơ

data () noexcept; data () const noexcept;

Một trong hai cách này trả về một con trỏ sao cho [data (), data () + size ()) là một phạm vi hợp lệ.

Điều này sẽ được đề cập chi tiết hơn trong phần sau của bài viết.

Trả lại các trình lặp và vectơ

Một trình lặp giống như một con trỏ nhưng có nhiều chức năng hơn một con trỏ.

begin () noexcept

Trả về một trình lặp trỏ đến phần tử đầu tiên của vectơ, như trong đoạn mã sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::người lặp lạiiter=vtr.bắt đầu();
Giá cả<< *iter<< ' ';

Đầu ra là 1,1. Lưu ý rằng khai báo nhận trình lặp đã được khai báo. Trình lặp được tham chiếu đến trong một biểu thức trả về để nhận được giá trị giống như cách mà một con trỏ được tham chiếu.

begin () const noexcept;

Trả về một trình lặp trỏ đến phần tử đầu tiên của vectơ. Khi cấu trúc vectơ được đặt trước bởi const, biểu thức begin () const được thực thi thay vì begin (). Trong điều kiện này, không thể sửa đổi phần tử tương ứng trong vectơ. Điều này được sử dụng trong đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::const_iteratoriter=vtr.bắt đầu();
Giá cả<< *iter<< ' ';

Đầu ra là 1,1. Lưu ý rằng const_iterator đã được sử dụng lần này thay vì chỉ trình vòng lặp để nhận trình lặp được trả về.

end () noexcept

Trả về một trình lặp trỏ ngay bên ngoài phần tử cuối cùng của vectơ. Hãy xem xét đoạn mã sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::người lặp lạiiter=vtr.kết thúc();
Giá cả<< *iter<< ' ';

Đầu ra là 0, điều này là vô nghĩa, vì không có phần tử cụ thể nào ngoài phần tử cuối cùng.

end () const noexcept

Trả về một trình lặp trỏ ngay bên ngoài phần tử cuối cùng của vectơ. Khi cấu trúc vectơ được đặt trước bởi const, biểu thức end () const được thực thi thay vì end (). Hãy xem xét đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::const_iteratoriter=vtr.kết thúc();
Giá cả<< *iter<< ' ';

Đầu ra là 0. Lưu ý rằng const_iterator đã được sử dụng lần này thay vì chỉ trình vòng lặp để nhận trình lặp được trả về.

Lặp lại đảo ngược

Có thể có một trình lặp lặp từ cuối đến ngay trước phần tử đầu tiên.

rbegin () noexcept

Trả về một trình lặp trỏ đến phần tử cuối cùng của vectơ, như trong đoạn mã sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::reverse_iteratorrIter=vtr.rbegin();
Giá cả<< *rIter<< ' ';

Đầu ra là 4,4.

Lưu ý rằng khai báo nhận trình lặp ngược đã được khai báo. Trình lặp được tham chiếu đến trong một biểu thức trả về để nhận được giá trị giống như cách mà một con trỏ được tham chiếu.

rbegin () const noexcept;

Trả về một trình lặp trỏ đến phần tử cuối cùng của vectơ. Khi cấu trúc vectơ được đặt trước bởi const, biểu thức rbegin () const được thực thi thay vì rbegin (). Trong điều kiện này, không thể sửa đổi phần tử tương ứng trong vectơ. Tính năng này được sử dụng trong đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::const_reverse_iteratorrIter=vtr.rbegin();
Giá cả<< *rIter<< ' ';

Đầu ra là 4,4.

Lưu ý rằng const_reverse_iterator đã được sử dụng lần này, thay vì chỉ là reverse_iterator, để nhận trình lặp được trả về.

render () noexcept

Trả về một trình lặp trỏ ngay trước phần tử đầu tiên của vectơ. Hãy xem xét đoạn mã sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::reverse_iteratorrIter=vtr.làm cho();
Giá cả<< *rIter<< ' ';

Đầu ra là 0, điều này là vô nghĩa, vì không có phần tử cụ thể nào ngay trước phần tử đầu tiên.

render () const noexcept

Trả về một trình lặp trỏ ngay trước phần tử đầu tiên của vectơ. Khi cấu trúc vectơ được đặt trước bởi const, biểu thức rend () const được thực thi thay vì rend (). Hãy xem xét đoạn mã sau:

hăng sôvectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi> ::const_reverse_iteratorrIter=vtr.làm cho();
Giá cả<< *rIter<< ' ';

Đầu ra là 0.

Lưu ý rằng const_reverse_iterator đã được sử dụng lần này, thay vì chỉ là reverse_iterator, để nhận trình lặp được trả về.

Công cụ sửa đổi vectơ

Một công cụ sửa đổi sửa đổi vectơ có thể lấy hoặc trả về một trình vòng lặp.

a.emplace (p, args)

Chèn một đối tượng kiểu T được xây dựng với std :: forward (args)… trước p.

Để biết chi tiết - xem sau

insert (iteratorPosition, value)

Chèn một bản sao của giá trị tại vị trí trình vòng lặp của vectơ. Trả về trình lặp (vị trí) trong vectơ nơi bản sao đã được đặt. Đoạn mã sau đây cho biết vị trí giá trị đã được đặt:

vectơ<NS>vtr{10, hai mươi, 30, 40};
vectơ<NS> ::người lặp lạiiter=vtr.bắt đầu();
++iter;
++iter;
vtr.chèn(iter, 25);
Giá cả<<vtr[1] << '' <<vtr[2]<< '
'
<<vtr[3] << ' ';

Kết quả đầu ra là: 20 25 30.

Lưu ý rằng trình vòng lặp được nâng cao (tăng dần) giống như một con trỏ.

Danh sách trình khởi tạo cũng có thể được chèn vào, như đoạn mã sau minh họa:

vectơ<NS>vtr{10, hai mươi, 30, 40};
vectơ<NS> ::người lặp lạiiter=vtr.bắt đầu();
++iter;
++iter;
vtr.chèn(iter, {25, 28});

Giá cả<<vtr[1] << '' <<vtr[2]<< '
'
<<vtr[3]<< '' <<vtr[4] << ' ';

Kết quả đầu ra là: 20 25 28 30.

xóa (vị trí)

Loại bỏ một phần tử tại vị trí được trỏ đến bởi trình vòng lặp, sau đó trả về vị trí trình vòng lặp. Đoạn mã sau minh họa điều này:

vectơ<NS>vtr{10, hai mươi, 30, 40};
vectơ<NS> ::người lặp lạiiter=vtr.bắt đầu();
++iter;
++iter;
vtr.tẩy xóa(iter);
Giá cả<<vtr[0] << '' <<vtr[1] << '
'
<<vtr[2]<< ' ';

Đầu ra là: 10 20 40

push_back (t), push_back (rv)

Được sử dụng để thêm một phần tử vào cuối vectơ. Sử dụng push_back (t) như sau:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vtr.push_back(5.5);
trôi nổifl=vtr[4];
Giá cả<<fl<< ' ';

Đầu ra là 5,5.

push_back(rv): -hẹn gặp lại.

pop_back ()

Loại bỏ phần tử cuối cùng mà không trả lại nó. Kích thước của vectơ giảm đi 1. Đoạn mã sau minh họa điều này:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vtr.pop_back();
trôi nổiNS=vtr.kích thước();
Giá cả<<NS<< ' ';

Đầu ra là 3.

a. hoán đổi (b)

Hai vectơ có thể được hoán đổi, như được minh họa trong đoạn mã sau:

vectơ<trôi nổi>vtr1{1.1, 2,2, 3,3, 4.4};
vectơ<trôi nổi>vtr2{10, hai mươi};
vtr1.tráo đổi(vtr2);
Giá cả<< 'vtr1:'<<vtr1[0] <<''<<vtr1[1] <<'
'
<<vtr1[2] <<''<<vtr1[3] << ' ';

Giá cả<< 'vtr2:'<<vtr2[0] <<''<<vtr2[1] <<'
'
<<vtr2[2] <<''<<vtr2[3] << ' ';

Đầu ra là:

vtr1: 10 hai mươi 0 0
vtr2: 1.1 2,2 3,3 4.4

Lưu ý rằng độ dài của vectơ được tăng lên, nếu cần. Ngoài ra, các giá trị không có giá trị thay thế được thay thế bằng một số giá trị mặc định.

sạch()

Xóa tất cả các phần tử khỏi vectơ, như đoạn mã sau minh họa:

vectơ<trôi nổi>vtr{1.1, 2,2, 3,3, 4.4};
vtr.sạch();
Giá cả<<vtr.kích thước() << ' ';

Đầu ra là 0.

Toán tử bình đẳng và quan hệ cho vectơ

Toán tử ==

Trả về 1 cho true nếu hai vectơ có cùng kích thước và các phần tử tương ứng bằng nhau; nếu không, nó trả về 0 cho false. Ví dụ:

vectơ<NS>U{1, 2, 3};
vectơ<NS>V{4, 5, 6};
bool bl=U==V;
Giá cả<<bl<< ' ';

Đầu ra là 0.

Toán tử! =

Trả về 1 cho true nếu hai vectơ không có cùng kích thước và / hoặc các phần tử tương ứng không bằng nhau; nếu không, nó trả về 0 cho false. Ví dụ:

vectơ<NS>U{1, 2, 3};
vectơ<NS>V{4, 5, 6};
bool bl=U! =V;
Giá cả<<bl<< ' ';

Đầu ra là 1.

Các

Trả về 1 cho true nếu vectơ đầu tiên là tập con ban đầu của vectơ thứ hai, với các phần tử của hai phần bằng nhau giống nhau và theo cùng một thứ tự. Nếu cả hai vectơ có cùng kích thước và di chuyển từ trái sang phải và gặp một phần tử trong vectơ đầu tiên nhỏ hơn phần tử tương ứng trong vectơ thứ hai, thì 1 sẽ vẫn được trả về. Nếu không, 0 cho false được trả về. Ví dụ:

vectơ<NS>U{3, 1, 1};
vectơ<NS>V{3, 2, 1};
bool bl=U<V;
Giá cả<<bl<< ' ';

Đầu ra là 1.

Nhà điều hành>

Trả lại! (U

Các<= Operator

Trả lại U<= V, where U is the first vector and V is the second vector, according to the above definitions.

Toán tử> =

Trả lại! (U<= V), where U is the first vector and V is the second vector, according to the above definitions.

Phần kết luận

Một vectơ là một ví dụ về một vùng chứa trình tự. Một vectơ là một dạng tốt hơn của mảng thông thường và được khởi tạo từ một lớp. Vectơ có các phương thức được phân loại theo: xây dựng và gán, dung lượng, truy cập phần tử, truy cập dữ liệu, trình vòng lặp, công cụ sửa đổi và toán tử nạp chồng số.

Có các vùng chứa trình tự khác, được gọi là danh sách, danh sách chuyển tiếp và mảng. Nếu nhiệm vụ liên quan đến việc chèn và xóa thường xuyên ở giữa chuỗi, thì nên sử dụng danh sách hoặc danh sách chuyển tiếp. Nếu nhiệm vụ liên quan đến việc chèn và xóa thường xuyên ở đầu hoặc cuối của chuỗi, thì nên sử dụng một deque. Và vì vậy, vectơ chỉ nên được sử dụng khi các loại phép toán này không quan trọng.