TỔNG HỢP CÁC HÀM VECTOR TRONG C++ VÀ CÁCH SỬ DỤNG

     

Chào đêm tối mọi người, hôm nay lang thang bên trên mạng bắt gặp bài toán thân quen một thời của quãng mặt đường sinh viên IT.

Bạn đang xem: Tổng hợp các hàm vector trong c++ và cách sử dụng

Chắc hẳn rất nhiều bạn trong bọn họ đã gặp mặt bài toán này rộng một lần nhìn trong suốt quá trình tới trường ở giảng mặt đường đại học.

Đấy đó là câu số 1 trong các đề thi dưới đây:

*

Để giải bài toán trên có nhiều cách, từ sử dụng mảng để quản lý danh sách khách hàng, danh sách liên kết, stack, queue...

Hôm nay họ hãy với mọi người trong nhà giải bài toán trên bởi vector trong tủ sách STL(Standard Template Library) của C++.

Vector là gì?

Vậy hãy cùng xem vector là gì? nó tất cả những ưu thế gì nhé?Giống như là mảng (array), vector trong C++ là một đối tượng người dùng dùng để đựng các đối tượng người tiêu dùng khác, với các đối tượng người dùng được đựng này cũng rất được lưu trữ một cách thường xuyên trong vector.

Tuy nhiên, nếu như như số lượng bộ phận (size) của một mảng là vắt định, thì nghỉ ngơi vector, nó trọn vẹn có thể chuyển đổi trong suốt thừa trình làm việc của chương trình

So với mảng, phương pháp dùng của vector thì linh hoạt hơn nhiều, và đó là 1 số điểm đặc sắc của vector đối với mảng array :

Bạn không cần phải khai báo form size của mảng lấy ví dụ int A<100>..., vector có thể auto nâng kíck thước lên.Nếu các bạn thêm một phần tử vào vector vẫn đầy rồi, thì vector sẽ tự động tăng kíck thước của nó lên để dành riêng chỗ đến giá trị bắt đầu này.- Vector còn có thể cho bạn biết con số các thành phần mà bạn đang lưu trong nó.Dùng số thành phần âm vẫn được trong vector lấy ví dụ A-10>, A<-3>, cực kỳ tiện trong việc cài đặt các giải mã khác.Cách dùng vector

Để hoàn toàn có thể dùng vector thì họ phải khai báo header vector và thư viện std

#include using namespace std;Và để khai báo một vector ta cần sử dụng cú pháp:

vector A ;

Câu lệnh trên khái niệm 1 vector gồm kiểu int. để ý kiểu của vector được để trong 2 dòng ngoặc nhọn.

Xem thêm: Những Lời Chia Buồn Ý Nghĩa Nhất, Please Wait

Vì kíck thước của vector có thể nâng lên, cho nên vì vậy không buộc phải khai báo đến nó gồm bao nhiêu thành phần cũng được, hoặc nếu thích khai báo thì bạn có thể khai báo giữa những cách như sau :

vector A(10);vector A(10, 2);

Đồng thời ta cũng hoàn toàn có thể khởi tạo cho 1 vector bởi giá trị của một vector khác, lấy một ví dụ :

vectorint> A(10,2); vectorint> B(A); Với mẫu lệnh bên trên thì vector B đang là bản sao của vector A.

Tiếp đến họ hãy cùng mọi người trong nhà làm quen thuộc về một số trong những hàm hay sử dụng trong vector nhé

Để thêm 1 phần tử vào vị trí sau cuối của vector:

name_of_vector.push_back(name_of_element);

Để vứt đi bộ phận cuối thuộc của vector:

name_of_vector.pop_back();

Để vứt đi toàn bộ các thành phần của vector:

name_of_vector.clear();

Để mang ra phần tử đầu tiên của vector:

name_of_vector.front();

Để mang ra bộ phận cuối thuộc của vector:

name_of_vector.back();

Để mang ra thành phần vị trí trang bị n của vector (đếm từ 0):

name_of_vector.at(n);

Để biết số lượng bộ phận của vector:

name_of_vector.size();

Để biết vector có thành phần hay không:

name_of_vector.empty();

Để xem xét vector bởi iterator:

vectorinteger>::iterator iter_name; // Khai báo con trỏ để duyệtfor (iter_name = name_of_vector.begin(); iter_name != name_of_vector.end(); iter_name++) cout *iter_name endl;Chú ý, sau khi bạn dùng áp dụng toán tử ++ vào đổi thay iterator, nó đang chỉ đến thành phần tiếp theo của vector. Còn toán tử * (value of) cho biết giá trị của phần tử mà bé trỏ iterator sẽ trỏ tới.

Giải quyết việc lập trình muôn thủa

Quay lại cùng với bàn toán đầu đề bài, bọn họ hãy cùng cả nhà đi xử lý nó.Khai báo header vector và một trong những header không giống hay cần sử dụng của C++

#include#include#include#includeusing namespace std;Khai báo một data structure chứa tin tức khách hàng:

// Declare structure informationtypedef struct customerchar mName<100>;char mCusType<3>; //Type of customer CN/CT/NNchar mProduct<100>;int mQuantity;double mPrice;TY_Customer;Khai báo một vector để cất và làm chủ thông tin quý khách hàng TY_Customer

typedef std::vectorTY_Customer> TY_CustomerList;TY_CustomerList vList;Định nghĩa 4 hàm thiết yếu để thực hiện các chức năng:

Nhập số khách hàngThông tin khách hàngSắp xếp thông tin khách hàngIn ra danh sách khách hàng

// Main functionsint input_number_of_customers(void);void input_customers_infor(TY_CustomerList* vList, int n);void display_list(TY_CustomerList* vList);void sort_customer_list(TY_CustomerList* vList);Chúng ta cũng định nghĩa một trong những hàm bổ trợ cho các hàm chính ở trên như sau:

// Other supporting functionsvoid print_menu(void); // Print selection menudouble get_discount(char* mCusType); //Get discount informationdouble calculate_money(TY_Customer *tmp); //Calculate total amount of money of each customervoid print_a_customer_info(TY_Customer *tmp); //Display information of a customerbool compare(TY_Customer tmp1, TY_Customer tmp2); // Used for vector sortvoid check_valid_input(void); // check input data is valid or notNhư bao bài xích toán ban đầu khác, họ sẽ cần sử dụng standard input/output function để nhập vào những thông tin trường đoản cú bàn phím.

Bắt đầu cùng với hàm nhập số khách hàng, vì số người tiêu dùng là một số luôn dương nên bọn họ cần check thêm đk đầu vào:

int input_number_of_customers(void)return n;}Tiếp mang đến là hàm nhập tin tức khách hàng, các thông tin sẽ được đưa vào trở nên tạm tmp và chuyển vào vector thông qua hàm push_back như sau.

Chúng ta cũng cần check các tài liệu dạng số numeric.

Xem thêm: Những Cách Buộc Dây Giày Converse 8 Lỗ Cổ Cao Đầy Năng Động, 7 Cách Thắt Dây Giày Converse 5 Lỗ

void input_customers_infor(TY_CustomerList* vList, int n) //Input information of customerschar select;if (!vList->empty()) select == "n")return;TY_Customer tmp;for (int i = 0; i > tmp.mName;cout > tmp.mCusType;//customer type must be CN, CT or NN while ((strcmp(tmp.mCusType, "CN") != 0) && strcmp(tmp.mCusType, "CT") != 0 && strcmp(tmp.mCusType, "NN") != 0);cout > tmp.mProduct;cout > tmp.mQuantity;while(!cin) // user didn"t đầu vào a number cin.clear(); // reset failed bit cin.ignore(std::numeric_limits::max(), " "); //skip bad input đầu vào cin >> tmp.mQuantity;cout > tmp.mPrice;while(!cin) // user didn"t input đầu vào a number cin.clear(); // reset failed bit cin.ignore(std::numeric_limits::max(), " "); //skip bad input đầu vào cin >> tmp.mPrice;cout ::max(), " "); //skip bad input}vList->push_back(tmp);}return;}Có khôn xiết nhiều phương pháp để duyệt các bộ phận của một vector, ngơi nghỉ đây bọn họ dùng cách đơn giản và dễ dàng nhất là tự động hóa hoặc iterator

void display_list(TY_CustomerList* vList) {if(vList->empty()) {cout Sau đó là hàm thu xếp các phần tử của vector, chúng ta chỉ vấn đề dùng sort của tủ sách std

void sort_customer_list(TY_CustomerList* vList) {if(vList->empty()) cout begin(), vList->end(), compare);Trong đó compare là bé trỏ hàm chỉ cho hàm cách thức thứ từ bỏ sort bởi vì ta từ định nghĩa:

bool compare(TY_Customer tmp1, TY_Customer tmp2) return (tmp1.mPrice > tmp2.mPrice);Các bạn có thể xem full giải mã của việc này ở ĐÂY/HERE

Như vậy với việc sử dụng vector thì ta rất có thể dễ dàng xử lý bài toán "muôn thủa" ngơi nghỉ trên.Nhanh hơn tương đối nhiều so với thực hiện mảng, hoặc những loại danh sách liên kết khác.

Nếu các bạn có các phương thức giải khác cấp tốc gọn hơn vậy thì hãy thuộc nhau chia sẻ nhé.Chào thân ái với quyết thắng. ENJOY CODING!