Cặp vector trong C++

“Hàm” trong C++ có 2 loại. hàm tự do và hàm thành viên. Free function is function as function in C. Hàm thành viên là hàm thuộc về 1 struct/class nào đó. Nếu 1 struct/class có quá tải toán tử

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
1 thì các đối tượng của struct/class đó có thể gọi
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
2 là hàm
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
0, và struct/class đó được gọi là đối tượng hàm. V

Lambda trong C++ là đối tượng hàm mà trình dịch tự đặt tên. V Nếu ko có “chụp” gì thì tuy nó là đối tượng chức năng nhưng khi được tối ưu thì hiệu năng của nó ko khác gì chức năng tự do. Nếu có chụp thì hiệu năng của nó cũng không khác gì việc viết struct/class riêng có từng thuộc tính được chụp ra. V

ví dụ mảng a = {1,2,3,4}, muốn đếm trong số > 2 ta có thể viết hàm miễn phí

bool greaterThan2(int x) { return x > 2; }

rồi truyền vào hàm

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
1

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);

nếu viết theo kiểu đối tượng hàm thì phải viết 1 struct

struct GreaterThan2 {
  bool operator()(int x) const { return x > 2; }
};

// sử dụng
GreaterThan2 gt2;
int gt2Count = std::count_if(begin(a), end(a), gt2);

// hoặc viết tắt
int gt2Count = std::count_if(begin(a), end(a), GreaterThan2{});

tuy viết theo kiểu đối tượng chức năng có tạo 1 đối tượng nhưng trình biên dịch khi tối ưu nó sẽ sử dụng tiền thuật toán

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
1 của struct
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
3 nên có chức năng tự do ngang dọc

viết đối tượng chức năng dòng khá dài, có thể viết kiểu lambda để thu gọn

int gt2Count = std::count_if(begin(a), end(a), [](int x) { return x > 2; });

mã này không khác gì mã sử dụng đối tượng chức năng, nên đánh dấu chức năng của nó như đối tượng chức năng và như chức năng miễn phí


cái hay của đối tượng chức năng là nó có thể có trạng thái riêng của nó, khác với chức năng tự do là không trạng thái. Ví dụ struct

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
4 muốn tìm số lớn hơn n = bao nhiêu cũng được, hàm miễn phí ko làm được điều này. Vì hàm
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
5 chỉ truyền vào hàm so sánh 1 giá trị
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
6, nếu hàm miễn phí muốn so sánh với n phải truyền 2 giá trị.
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
7. Xài function object thì làm được

bool greaterThan2(int x) { return x > 2; }
1

use lambda for short

bool greaterThan2(int x) { return x > 2; }
2

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
8 được chụp ở đây có kiểu là
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
9 tương đương với 1 struct thế này

bool greaterThan2(int x) { return x > 2; }
5

default capture is

struct GreaterThan2 {
  bool operator()(int x) const { return x > 2; }
};

// sử dụng
GreaterThan2 gt2;
int gt2Count = std::count_if(begin(a), end(a), gt2);

// hoặc viết tắt
int gt2Count = std::count_if(begin(a), end(a), GreaterThan2{});
0 hết, nên code generate ra có lúc còn nhanh hơn viết function object bằng tay mà quên bỏ
struct GreaterThan2 {
  bool operator()(int x) const { return x > 2; }
};

// sử dụng
GreaterThan2 gt2;
int gt2Count = std::count_if(begin(a), end(a), gt2);

// hoặc viết tắt
int gt2Count = std::count_if(begin(a), end(a), GreaterThan2{});
0 cho các thuộc tính ko thay đổi khi sử dụng thuật toán
int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
1 nữa. V (nghe đồn nếu để mặc định mọi thứ là const, chỉ biến số thay đổi mới không có const thì mã biên dịch ra có thể nhanh hơn. V)

Trong bài viết này, chúng tôi đã đề cập đến ý tưởng về Véc-tơ của Cặp trong C++ với các ví dụ mã cùng với kiến ​​thức cơ bản về Cặp và véc-tơ trong C++

Mục lục

  1. Cơ bản về Pair trong C++
  2. Cơ bản về Vector trong C++
  3. Vector cặp trong C++

Hãy để chúng tôi bắt đầu với Vector of Pair trong C++

Cơ bản về Pair trong C++

Cặp là một thùng chứa lưu trữ hai phần tử dữ liệu trong đó. Không nhất thiết hai giá trị hoặc thành phần dữ liệu phải cùng kiểu dữ liệu

cú pháp

Cặp vector trong C++

Giá trị đầu tiên được đưa ra trong cặp trên có thể được truy cập bằng cách sử dụng pair_name. tương tự đầu tiên, giá trị thứ hai có thể được truy cập bằng cách sử dụng pair_name. thứ hai

Mã số

bool greaterThan2(int x) { return x > 2; }
8

đầu ra

Cặp vector trong C++

Cơ bản về Vector trong C++

Các vectơ là các thùng chứa có thể lưu trữ nhiều phần tử dữ liệu có thể thay đổi kích thước. Các phần tử dữ liệu trong vectơ có cùng kiểu dữ liệu. Vector là một mảng động trong đó kích thước của mảng có thể thay đổi. Các vectơ được lưu trữ trong ngăn xếp nhưng các phần tử của Vector này được lưu trữ trong bộ nhớ heap

cú pháp

Cặp vector trong C++

Có một số chức năng được sử dụng trong các vectơ để lặp lại, truy cập các phần tử, sửa đổi các phần tử, để kiểm tra dung lượng của các vectơ

vòng lặp

1. bắt đầu(). Hàm này trả về một iterator trỏ đến phần tử đầu tiên của vector.
2. chấm dứt(). Hàm này trả về một trình vòng lặp trỏ đến phần tử phía sau phần tử cuối cùng của vectơ.
3. bắt đầu(). Hàm này trả về một trình vòng lặp không đổi trỏ đến phần tử đầu tiên của vectơ.
4. cend(). Hàm này trả về một trình lặp trỏ đến phần tử phía sau phần tử cuối cùng của vectơ.
5. bắt đầu(). Hàm này trả về một trình lặp ngược trỏ đến phần tử cuối cùng của vectơ.
6. ren(). Hàm này trả về một trình lặp ngược trỏ đến phần tử đứng trước phần tử đầu tiên của vectơ.

Truy cập các phần tử

1. at(j)-Trả về tham chiếu đến phần tử tại vị trí 'j'.
2. front()-Trả về tham chiếu đến phần tử đầu tiên.
3. back()- Trả về tham chiếu đến phần tử cuối cùng;
4. a. toán tử()[j]. Trả về một tham chiếu đến phần tử ở vị trí 'j'

Dung tích

1. size() – Trả về số phần tử trong vector.
2. max_size() – Trả về số phần tử tối đa mà vector có thể chứa.
3. capacity() – Trả về kích thước của không gian lưu trữ hiện được phân bổ cho 4. vectơ được biểu thị bằng số phần tử.
5. resize(n) – Thay đổi kích thước vùng chứa để nó chứa các phần tử ‘n’.
6. trống () – Trả về liệu vùng chứa có trống không.

sửa đổi

1. đẩy_back(). Hàm chèn các phần tử vào một vectơ từ phía sau.
2. giao phó(). Nó gán một giá trị mới cho các phần tử vectơ bằng cách thay thế các phần tử cũ.
3. pop_back(). Hàm pop_back() được sử dụng để bật hoặc xóa các phần tử cuối cùng khỏi vectơ.
4. chèn(). Hàm này chèn các phần tử mới trước vị trí được chỉ định bởi trình vòng lặp.
5. xóa(). Hàm này được sử dụng để xóa các phần tử khỏi vùng chứa khỏi vị trí hoặc phạm vi đã chỉ định.
6. tráo đổi(). Hàm này dùng để hoán đổi nội dung của một vectơ này với một vectơ khác cùng loại. Kích thước có thể khác nhau.
7. xa lạ(). Hàm này dùng để xóa tất cả các phần tử của vùng chứa véc tơ

Mã số

bool greaterThan2(int x) { return x > 2; }
9

đầu ra

Cặp vector trong C++

Vector cặp trong C++

Vector of Pairs là một mảng động chứa đầy các cặp thay vì bất kỳ kiểu dữ liệu nguyên thủy nào. Vectơ cặp không khác gì vectơ khi khai báo và truy xuất cặp

Làm cách nào để khai báo một véc-tơ cặp?.
Trả lời. Để khai báo một cặp véc tơ chúng ta có thể sử dụng cú pháp. vectơ

Làm cách nào để thêm một cặp vào một vectơ gồm các cặp hiện có?.
Trả lời. Để thêm một cặp vào một vectơ cặp hiện có, chúng ta có thể sử dụng câu lệnh bên dưới. một. push_back(make_pair("ABC",15));
or
a. emplace_back("ABC",15);
hàm push_back giúp cộng các phần tử vào vector, hàm make_pair chuyển các tham số thành từng cặp.

Làm cách nào để xóa một cặp khỏi vectơ?.
Trả lời. Chúng ta có thể sử dụng một. pop_back(); . xóa (một. bắt đầu() + i); .
or
We can use a.erase(a.begin() + i); to delete from a specified position 'i'.

Mã để thêm và xóa các cặp từ vectơ

int gt2Count = std::count_if(begin(a), end(a), greaterThan2);
0

đầu ra

Cặp vector trong C++

Hiệu suất của vectơ

Các vectơ khá giống với mảng khi nói đến chức năng của nó, mặc dù vectơ đó tương đối nhanh hơn so với mảng. Các vectơ tốt hơn khi được sử dụng để chèn và xóa các phần tử thường xuyên, Mảng khá tốt hơn khi truy cập thường xuyên các phần tử. Về không gian, vectơ chiếm nhiều không gian hơn mảng

  • Truy cập ngẫu nhiên - hằng số 𝓞(1)
  • Chèn hoặc loại bỏ các phần tử ở cuối - hằng số khấu hao 𝓞(1)
  • Chèn hoặc loại bỏ các phần tử - tuyến tính trong khoảng cách đến cuối vectơ 𝓞(n)

Các ứng dụng

  • Vectơ là mảng động, nghĩa là kích thước của vectơ thay đổi sau mỗi lần chèn hoặc xóa phần tử dữ liệu. Các vectơ có thể rất hữu ích trong các tình huống có sự thay đổi thường xuyên của các phần tử dữ liệu

  • Trong thời gian thực, Vectơ khá hữu ích trong Thị giác máy tính, Trí tuệ nhân tạo, v.v. nơi dữ liệu liên tục được lưu trữ và được sử dụng để ra quyết định. Trong trường hợp này, kích thước của dữ liệu được diễn giải không cố định

  • Vectơ khá phù hợp với bất kỳ ứng dụng nào sử dụng biểu diễn lưới.
    Câu hỏi thường gặp

  • Hàm nào chèn các phần tử tại một vị trí cụ thể trong vectơ?

Câu trả lời. Hàm insert() giúp chèn phần tử vào vị trí xác định trong vector

  • Làm cách nào để xóa tất cả các phần tử của vectơ?

Câu trả lời. Hàm clear() có thể được sử dụng để xóa tất cả các phần tử trong một vectơ

  • Làm cách nào để kiểm tra số lượng phần tử có trong một vectơ?

Câu trả lời. hàm size() có thể được sử dụng để tìm kích thước của các phần tử

  • Làm cách nào tôi có thể truy cập một vectơ?

Câu trả lời. Một vectơ có thể được truy cập bằng cách lập chỉ mục trực tiếp bằng cách sử dụng toán tử tham chiếu hoặc chúng ta có thể sử dụng hàm at() với một số vị trí được truyền dưới dạng tham số. Để truy cập phần tử đầu tiên của vector chúng ta có thể sử dụng front() và back() có thể được sử dụng cho phần tử cuối cùng