Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

std::vector::resize() so với std::vector::reserve() trong C++

Vector có khả năng tự thay đổi kích thước giống như mảng động khi phần tử được chèn hoặc xóa, container tự động xử lý bộ nhớ.

Khác biệt chính giữa resize() và reserve() là resize() thay đổi kích thước vector, còn reserve() không. reserve() chỉ dùng để đảm bảo vector có thể chứa ít nhất số phần tử chỉ định mà không cần cấp phát lại bộ nhớ. Nhưng trong resize(), nếu số lượng nhỏ hơn số lượng hiện tại thì nó sẽ thay đổi kích thước bộ nhớ và xóa phần dư thừa.

vector::resize()

resize() dùng để thay đổi kích thước của vector.

Ví dụ

Các bước trong mã nguồn:

Bắt đầu
  Khai báo biến v kiểu vector.
  Khai báo biến it kiểu iterator.
  Khai báo c, i kiểu integer.
  while (TRUE) do
    In "1.Kích thước Vector".
    In "2.Chèn phần tử vào Vector".
    In "3.Thay đổi kích thước vector".
    In "4.Hiển thị bằng Iterator".
    In "5.Thoát".
    In "Nhập lựa chọn:".
    Nhập c.
    Switch(c)
      Case 1. In "Kích thước Vector:". Gọi size(). Break.
      Case 2. In "Nhập giá trị chèn:". Nhập i. Gọi push_back(). Break.
      Case 3. In "Thay đổi kích thước vector:". Gọi resize(). Break.
      Case 4. In "Hiển thị bằng Iterator:". for (it=v.begin(); it!=v.end(); it++) in *it. Break.
      Case 5. Gọi exit(). Break.
      Default. In "Lựa chọn sai".
Kết thúc.

Mã ví dụ

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v;
    vector<int>::iterator it;
    int c, i;
    while (1) {
        cout << "1.Kích thước Vector" << endl;
        cout << "2.Chèn phần tử vào Vector" << endl;
        cout << "3.Thay đổi kích thước vector" << endl;
        cout << "4.Hiển thị bằng Iterator" << endl;
        cout << "5.Thoát" << endl;
        cout << "Nhập lựa chọn: ";
        cin >> c;
        switch(c) {
            case 1:
                cout << "Kích thước Vector: ";
                cout << v.size() << endl;
                break;
            case 2:
                cout << "Nhập giá trị cần chèn: ";
                cin >> i;
                v.push_back(i);
                break;
            case 3:
                cout << "Thay đổi kích thước vector:" << endl;
                v.resize(4);
                break;
            case 4:
                cout << "Hiển thị Vector bằng Iterator: ";
                for (it = v.begin(); it != v.end(); it++)
                    cout << *it << " ";
                cout << endl;
                break;
            case 5:
                exit(1);
                break;
            default:
                cout << "Lựa chọn sai" << endl;
        }
    }
    return 0;
}

Kết quả

1.Kích thước Vector 2.Chèn phần tử vào Vector 3.Thay đổi kích thước vector 4.Hiển thị bằng Iterator 5.Thoát Nhập lựa chọn: 1 Kích thước Vector: 0 ...

vector::reserve()

reserve() chỉ ra rằng vector được tạo sao cho có thể chứa ít nhất số phần tử chỉ định mà không cần cấp phát lại bộ nhớ.

Thuật toán

Bắt đầu
  Khai báo biến v kiểu vector.
  Khai báo biến it kiểu iterator.
  Khai báo c, i kiểu integer.
  while (1) do
    In "1.Kích thước Vector".
    In "2.Chèn phần tử vào Vector".
    In "3.Dự trữ vector".
    In "4.Hiển thị bằng Iterator".
    In "5.Thoát".
    In "Nhập lựa chọn:".
    Nhập c.
    Switch(c)
      Case 1. In "Kích thước Vector:". Gọi size(). Break.
      Case 2. In "Nhập giá trị chèn:". Nhập i. Gọi push_back(). Break.
      Case 3. In "Dự trữ vector:". Gọi reserve(). Break.
      Case 4. In "Hiển thị bằng Iterator:". for (it=v.begin(); it!=v.end(); it++) in *it. Break.
      Case 5. Gọi exit(). Break.
      Default. In "Lựa chọn sai".
Kết thúc.

Mã ví dụ

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v;
    vector<int>::iterator it;
    int c, i;
    while (1) {
        cout << "1.Kích thước Vector" << endl;
        cout << "2.Chèn phần tử vào Vector" << endl;
        cout << "3.Dự trữ vector" << endl;
        cout << "4.Hiển thị bằng Iterator" << endl;
        cout << "5.Thoát" << endl;
        cout << "Nhập lựa chọn: ";
        cin >> c;
        switch(c) {
            case 1:
                cout << "Kích thước Vector: ";
                cout << v.size() << endl;
                break;
            case 2:
                cout << "Nhập giá trị cần chèn: ";
                cin >> i;
                v.push_back(i);
                break;
            case 3:
                cout << "Dự trữ các phần tử vector." << endl;
                v.reserve(100);
                break;
            case 4:
                cout << "Hiển thị Vector bằng Iterator: ";
                for (it = v.begin(); it != v.end(); it++) {
                    cout << *it << " ";
                }
                cout << endl;
                break;
            case 5:
                exit(1);
                break;
            default:
                cout << "Lựa chọn sai" << endl;
        }
    }
    return 0;
}

Kết quả

1.Kích thước Vector 2.Chèn phần tử vào Vector 3.Dự trữ vector 4.Hiển thị bằng Iterator 5.Thoát Nhập lựa chọn: 1 Kích thước Vector: 0 ...