Một trong những ưu điểm và nổi bật của ngôn ngữ C++ so với tiền nhiệm C đó là Vector. Vậy, Vector C++ là gì và những cách thức hoạt động của nó ra sao? Đồng thời chúng ta cũng sẽ tìm hiểu về những lý do nên sử dụng nó trong lập trình thông qua những chia sẻ trong bài viết sau đây!

Tìm hiểu về Vector C++

Trong khi tìm hiểu về Vector C++ chúng ta cũng sẽ tìm hiểu qua về ngôn ngữ lập trình C++ để hiểu thêm về lý do tại sao Vector trong C++ lại được sử dụng nhiều như vậy.

Ngôn ngữ lập trình C++

C++ là một ngôn ngữ lập trình được sử dụng tương đối rộng rãi hiện nay, với những lập trình viên thì đây là ngôn ngữ không còn xa lạ. Ngôn ngữ này có thể phân biệt khai báo dạng chữ hoa và chữ thường. Bên cạnh đó, C++ còn được biết đến bởi nó là ngôn ngữ lập trình dạng tự do hướng đối tượng.

Ngôn ngữ lập trình C++
Ngôn ngữ lập trình C++

Vector C++ cũng được phát triển dựa trên gốc C++. C++ mang đến một nền tảng ngôn ngữ sử dụng hiệu quả trong lập trình, gần gũi hơn cả những ngôn ngữ máy. Không chỉ vậy, sức mạnh của C++ còn nằm ở SLT hay viết tắt của Standard Template Library – thư viện template chỉ dành riêng cho C++.

Vector trong C++

Đây là khải niệm quen thuộc trong lập trình, được nhiều lập trình viên sử dụng. Vector trong C++ được sử dụng như dynamic array hay mảng động. Tuy nhiên nó có khả năng thay đổi kích thước khi thực hiện chèn hoặc xóa phần tử. Tùy vào nhu cầu sử dụng và lưu trữ mà người dùng có thể cho những phần tử này được tự động xử lý.

Vector trong C++ là gì?
Vector trong C++ là gì?

Những phần tử trong vector C++ được đặt trong các bộ nhớ liền kề. Tất cả những điều này người sử dụng có thể truy duyệt qua bằng cách dùng iterator.

Tại sao nên sử dụng Vector C++?

Nhiều lập trình viên đã sử dụng C++ lâu rồi nhưng lại mới chuyển qua sử dụng vector. Lý do là bởi nó hỗ trợ khắc phục việc quản lý các mảng động thông qua con trỏ trong C++. Nếu chỉ sử dụng để quản lý thông thường cùng việc tạo ra mảng mới, copy sang mảng mới và sau đó lại xóa đi thì sẽ vô cùng mất thời gian và trở nên nhàm chán.

Chính vì vậy, lập trình viên lựa chọn vector C++ để thực hiện quy trình này. Nó sẽ giúp quá trình quản lý mảng động diễn ra đơn giản và dễ dàng hơn. Người dùng hoàn toàn có thể thay đổi kích thước của mảng trong vector.

Những ưu điểm nổi bật của Vector C++

Vector trong C++ có ưu điểm nổi bật đó là khả năng thay đổi kích thước để phù hợp với mục đích và nhu cầu sử dụng của lập trình viên, cụ thể như sau:

  • Người lập trình không cần phải khai báo kích thước của mảng ví dụ như int X[100] vì vector có khả năng tự thay đổi kích thước khi bạn thêm hay xóa phần tử trong mảng, vector hoạt động như một mảng động.
  • Nếu lập trình viên thêm một phần từ vào một vector trong C++ thì vector đó sẽ tự tăng kích thước để chứa phần tử mới thêm vào.
  • Bên cạnh đó, nó còn cho bạn biết kích thước, số lượng phân tử đang được lưu trữ
  • Bạn vẫn có thể dùng phần tử âm trong mảng như X[-2] để thuận tiện nếu có mục đích giải thuật cụ thể.
Vector trong C++ có nhiều ưu điểm nổi bật
Vector trong C++ có nhiều ưu điểm nổi bật

Vector cũng có thể tự giải phóng bộ nhớ khi người lập trình thực hiện xong đoạn code, thoát ra khỏi scope đang chứa vector. Điều này để tránh rò rỉ bộ nhớ khi người dùng quên xóa mảng. Đồng thời nó cũng cung cấp cho bạn những hàm cần thiết để thao tác trong vector trở nên đơn giản, dễ dàng hơn.

Những Vector C++ được lưu trữ như thế nào?

Cùng tìm hiểu xem những vector trong C++ được lưu trữ để xử lý như thế nào trong lập trình bằng ngôn ngữ C++!

Cơ chế ngăn chặn rò rỉ bộ nhớ của Vector trong C++

Khi vector rời khỏi phạm vi đoạn mã trong khi chương trình đang được chạy, nó sẽ tự động giải phóng những phần bộ nhớ mà bản thân vector đó đang kiểm soát. Điều này không chỉ tiện dụng vì lập trình viên không cần phải thực hiện lệnh giải phóng, mà còn hỗ trợ hạn chế tình trạng rò rỉ bộ nhớ.

Ví dụ như sau:

void doSomething(bool earlyExit)

{

int *array = new int[3]{ 1, 3, 2 };

if (earlyExit) // thoát khỏi hàm

return;

delete[] array; // trường hợp hàm thoát sớm, array sẽ không bị xóa

}

Trường hợp biến earlyExit là true, mảng *array sẽ không được giải phóng và sẽ dẫn đến rò rỉ bộ nhớ.

Tuy nhiên, nếu thay array là vector việc rò rỉ sẽ khoogn xảy ra bởi bộ nhớ đó sẽ được giải phóng ngay sau khi array nằm ngoài phạm vi của đoạn mã đang viết khi chương trình được thực thi. Điều này chứng minh vector C++ an toàn hơn so với việc lập trình viên phải tự chú ý để tiến hành giải phóng bộ nhớ của mình.

Vector trong C++ tự ghi nhớ độ dài chính mình

Khác với mảng động được tích hợp sẵn trong C++ (không biết độ dài của mang đang được trỏ tời có bao nhiêu phần tử), vector sẽ tự theo dõi và ghi nhớ số lượng các phân tử đang được lưu trữ, lập trình viên có thể lấy kích thước vector thông qua hàm size() mà vector đã tạo sẵn:

void printLength(const std::vector<int>& array)

{

    std::cout << “The length is: ” << array.size() << ‘\n’;

}

int main()

{

    std::vector array { 9, 7, 5, 3, 1 };

    printLength(array);

    return 0;

}

Theo đó kết quả sẽ là: The length is: 5

Những hàm Vector trong C++

Trong SLT, Vector C++ cung cấp cho người dùng nhiều tính năng hữu ích.

Những hàm sử dụng với Vector C++
Những hàm sử dụng với Vector C++

Modifiers

Trong Modifiers, lập trình viên có thể sử dụng những hàm cơ bản sau:

  • push_back(): Đây là hàm đẩy phần tử vào vị trí cuối của vector, nếu kiểu dữ liệu của phần tử thêm vào khác với kiểu của vector thì phần tử đó sẽ bị ném ra: ten_vector.push_back(ten_phan_tu).
  • assign(): Phương thức này sẽ thay gán giá trị mới cho những giá trị cũ trong vector C++: ten_vector.assign(int size, int value).
  • pop_back(): Sử dụng xóa phần tử cuối cùng trong vector: ten_vector.pop_back();
  • insert(): Sử dụng chèn các phần tử mới phía trước phần tử được trỏ trong vòng lặp: ten_vector.insert(position, value).
  • rase(): Sử dụng xóa những phần tử dựa theo vị trí vùng chứa phần tử đó: ten_vector.erase(position).
  • emplace_back(): Sử dụng chèn phần tử mới vào vùng chứa của vector, được thêm vào cuối: ten_vector.emplace_back(value).
  • swap(): Dùng hoán đổi một vector này với một vector cùng kiểu khác (có thể khác nhau về kích thước): ten_vector1.swap(ten_vector2).
  • clear(): Xóa tất cả các phần tử trong vùng chứa của vector: ten_vector.clear().

Iterators

Các hàm sử dụng trong Iterators bao gồm:

  • begin(): Đặt iterator đến phần tử đầu tiên trong vector: ten_vector.begin();
  • end(): Đặt iterator đến sau phần tử cuối cùng trong vector: ten_vector.end();
  • rbegin(): Đặt reverse iterator (trình lặp đảo) đến phần tử cuối cùng trong vector (reverse begin). Nó di chuyển từ phần tử cuối cùng đến phần tử đầu tiên: ten_vector.rbegin();
  • rend(): Đặt reverse iterator (trình lặp đảo) đến phần tử đầu tiên trong vector (reverse end): ten_vector.rend();
  • cbegin(): Đặt constant iterator (trình vòng lặp) đến phần tử đầu tiên trong vector: ten_vector.cbegin();
  • cend(): Đặt constant iterator (trình vòng lặp) đến phần tử cuối cùng trong vector: ten_vector.cend();
  • crbegin(): Đặt const reverse iterator (trình lặp đảo liên tục) đến phần tử cuối cùng trong vector (reverse begin). Nó di chuyển từ phần tử cuối cùng đến phần tử đầu tiên: ten_vector.cbregin();
  • crend(): Đặt const reverse iterator (trình lặp đảo liên tục) đến phần tử đầu tiên trong vector (reverse end): ten_vector.crend();
Ví dụ về các hàm Iterators trong Vector C++
Ví dụ về các hàm Iterators trong Vector C++

Capacity

Những hàm cần trong trong việc truy xuất capacity của vector C++ gồm:

  • size(): Hàm sẽ trả về số lượng phần tử đang được sử dụng trong vector: ten_vector.size();
  • max_size(): Hàm trả về số phần tử tối đa mà vector có thể chứa: ten_vector.max_size();
  • capacity(): Hàm trả về số phần tử được cấp phát cho vector nằm trong bộ nhớ: ten_vector.capacity();
  • resize(n): Thay đổi kích thước để có thể chứa n phần tử: ten_vector.resize(int n, int value);
  • empty(): Trả về liệu vùng chứa có trống hay không, nếu trống thì trả về True, nếu có phần tử thì trả về False: ten_vector.empty();
  • shrink_to_fit(): Giảm dung lượng của vùng chứa để phù hợp với kích thước của nó và hủy tất cả các phần tử vượt quá dung lượng: ten_vector.shrink_to_fit();
  • reserve(n): Hàm cấp cho vector số dung lượng vừa đủ để chứa n phần tử: ten_vector.reserve(n);

Element access

Những hàm cần thiết có thể kể đến như:

  • at(g): Trả về một tham chiếu đến phần tử ở vị trí ‘g’ trong vector: ten_vector.at(position);
  • data(): Trả về một con trỏ trực tiếp đến (memory array) bộ nhớ mảng được vector sử dụng bên trong để lưu trữ các phần tử thuộc sở hữu của nó: ten_vector.data();
  • front(): Hàm dùng để lấy ra phần tử đầu tiên của vector: ten_vector.front();
  • back(): Hàm dùng để lấy ra phần tử cuối cùng của vector: ten_vector.back();

Trên đây là những kiến thức cơ bản về vector trong C++. Mong rằng những chia sẻ này đã cung cấp cho bạn những hiểu biết để sử dụng vector C++ hiệu quả trong quản lý mảng và những tác vụ liên quan!

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96