Vector là một mảng động có các phần tử nằm liên tiếp nhau trong bộ nhớ nhưng có thể thay đổi kích thước bất kì.
- Có 3 cách khởi tạo vector là:
vector<kiểu dữ liệu> tên_vector;
vector<kiểu dữ liệu> tên_vector(số lượng phần tử);
vector<kiểu dữ liệu> tên_vector(số phần tử, giá trị mặc định);
Ví dụ: vector<bool> a(100, true);
¶ 3) Nhập xuất
* Nhập xuất vector
- Nhập xuất vector giống với nhập xuất mảng.
- Có thêm hàm/phương thức bổ trợ để thêm giá trị vào cuối vector trong trường hợp chưa biết rõ số phần tử hoặc muốn thêm trong lúc thực thi.
- Cú pháp:
tên_vector.push_back(giá_trị);
- Xem trong phần ví dụ.
¶ 4) Các thao tác cơ bản với Vector các hàm, phương thức
* Các hàm/phương thức của vector
- Thêm phần tử:
myvector.push_back(x); // thêm phần tử x vào cuối vector
myvector.insert(pos, x); // thêm x vào vị trí pos
myvector.insert(pos, k, x); // thêm k phần tử x từ vị trí pos
myvector.insert(pos, x.begin(), x.end()); // thêm vector x vào myvector từ vị trí pos
myvector.insert(pos, array, array + k); // thêm k phần tử từ mảng array vào vector
- Lưu ý:
- begin(): trả về vị trí đầu của vector.
- end(): trả về vị trí cuối của vector.
- Xóa phần tử:
myvector.erase(myvector.begin() + pos); // xóa phần tử tại vị trí pos
myvector.erase(myvector.begin() + i, myvector.begin() + k); // xóa từ i đến k
myvector.pop_back(); // xóa phần tử cuối
- Sắp xếp:
#include <algorithm>
sort(v.begin(), v.end()); // tăng dần
sort(v.begin(), v.end(), greater<int>()); // giảm dần
sort(first, last); // tăng dần đoạn
sort(first, last, greater<int>()); // giảm dần đoạn
- Các thao tác khác:
myvector.size(); // số phần tử
myvector.clear(); // xóa toàn bộ
myvector.begin(); // vị trí đầu
myvector.front(); // phần tử đầu
myvector.end(); // vị trí cuối
myvector.back(); // phần tử cuối
myvector[pos];
myvector.at(pos); // truy cập phần tử
myvector.empty(); // kiểm tra rỗng
reverse(myvector.begin(), myvector.end()); // đảo ngược toàn bộ
reverse(myvector.begin(), myvector.begin() + 2); // đảo một đoạn
swap(vta, vtb); // đổi 2 vector
myvector.rbegin(); // duyệt ngược
myvector.rend();
myvector.max_size(); // số phần tử tối đa
myvector.capacity(); // dung lượng hiện tại
myvector.reserve(n); // cấp phát trước n phần tử
Ghi nhớ:
- Vector có rất nhiều hàm hỗ trợ mạnh hơn mảng.
- Nên dùng vector khi cần thay đổi kích thước linh hoạt.
- Thành thạo các hàm giúp code ngắn gọn và tối ưu hơn.
¶ 5) Nhập giá trị cho vector từ bàn phím dùng phương khi không biết vector có bao nhiêu phần tử
* Ví dụ: Sử dụng push_back
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
vector<int> v;
int i, giatri;
for(i = 0; i < 10; i++)
{
cout << "Nhap phan tu thu " << i << ": ";
cin >> giatri;
v.push_back(giatri);
}
cout << v.size() << "\n";
v.push_back(58);
int soluong = v.size();
cout << soluong << "\n";
for(i = 0; i < soluong; i++)
{
cout << v[i] << " ";
}
return 0;
}
Ghi nhớ:
- push_back() dùng để thêm phần tử vào cuối vector.
- size() trả về số phần tử hiện tại của vector.
- Vector tự động tăng kích thước khi thêm phần tử.
¶ 6) Nhập giá trị cho vector từ bàn phím khi biết vector có bao nhiêu phần tử, dùng tương tự như mảng
* Ví dụ: Khởi tạo vector với kích thước ban đầu
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i, n;
cout << "Nhap so phan tu cua day, n = ";
cin >> n;
vector<int> v(n);
for(i = 0; i < n; i++)
{
cout << "Nhap phan tu thu " << i << ": ";
cin >> v[i];
}
cout << v.size() << "\n";
v.push_back(58);
int soluong = v.size();
cout << soluong << "\n";
for(i = 0; i < soluong; i++)
{
cout << v[i] << " ";
}
return 0;
}
Ghi nhớ:
- Có thể khởi tạo vector với kích thước ban đầu.
- Sau đó vẫn có thể thêm phần tử bằng push_back().
- Vector linh hoạt hơn mảng tĩnh.
¶ 7) Nhập giá trị cho vector đọc từ tệp dùng phương thức push_back khi không biết vector có bao nhiêu phần tử
¶ Đọc dữ liệu từ file với vector
Cho dữ liệu trong tệp DEMO.INP gồm hai dòng:
- Dòng 1 là số tự nhiên n (1 ≤ n ≤ 109).
- Dòng 2 là dãy số gồm n phần tử cách nhau ít nhất một dấu cách.
DEMO.INP
DEMO.OUT
10
8 9 7 4 7 8 9 6 23 98
8 9 7 4 7 8 9 6 23 98
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("DEMO.INP", "r", stdin);
freopen("DEMO.OUT", "w", stdout);
long long n;
cin >> n;
vector<long long> a(n);
for (long long i = 0; i < n; i++)
{
cin >> a[i];
}
for (long long i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}
* Ví dụ
Cho dữ liệu trong tệp DEMO.INP gồm một dòng duy nhất là dãy số có n phần tử cách nhau ít nhất một dấu cách.
DEMO.INP
DEMO.OUT
8 9 7 4 7 8 9 6 23 98
8 9 7 4 7 8 9 6 23 98
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("DEMO.INP", "r", stdin);
freopen("DEMO.OUT", "w", stdout);
vector<long long> v;
long long x;
// Đọc đến hết file
while (cin >> x)
{
v.push_back(x);
}
for (long long i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
return 0;
}
Ghi nhớ:
- Có thể đọc dữ liệu từ file bằng freopen().
- Dùng vector giúp lưu dữ liệu linh hoạt.
- Có thể đọc đến hết file bằng vòng lặp while(cin >> x).
¶ 8) Nhập giá trị cho vector đọc từ tệp khi biết vector có bao nhiêu phần tử, dùng tương tự như mảng
¶ Đọc dữ liệu từ file (vector)
Cho dữ liệu trong tệp DEMO.INP gồm hai dòng:
- Dòng 1 là số tự nhiên n (1 ≤ n ≤ 109).
- Dòng 2 là dãy số gồm n phần tử cách nhau ít nhất một dấu cách.
DEMO.INP
DEMO.OUT
10
8 9 7 4 7 8 9 6 23 98
8 9 7 4 7 8 9 6 23 98
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("DEMO.INP", "r", stdin);
freopen("DEMO.OUT", "w", stdout);
long long n;
cin >> n;
vector<long long> v(n);
for (long long i = 0; i < n; i++)
{
cin >> v[i];
}
for (long long i = 0; i < n; i++)
{
cout << v[i] << " ";
}
return 0;
}
Ghi nhớ:
- Dùng freopen() để đọc/ghi file.
- Vector giúp lưu trữ dữ liệu linh hoạt.
- Có thể nhập theo số lượng phần tử đã biết trước.
¶ Liên kết nhanh
- Về trang mục lục: NGÔN NGỮ LẬP TRÌNH C++ DÀNH CHO NGƯỜI HỌC TỪ CON SỐ 0
- 🌐 Trang chấm bài: https://vnoj.io.vn
- 📩 Liên hệ hỗ trợ: admin@vnoj.io.vn