std::vector::operator[]
#include <vector>
reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
Truy xuất phần tử tại vị trí chỉ định.
Tham số
n
- Vị trí của phần tử cần truy cập (kiểu
size_t
). - Chỉ nhận một tham số duy nhất là
n
(vị trí phần tử), phải nằm trong phạm vi hợp lệ[0, size()-1]
. - Không kiểm tra giới hạn (bounds checking): Nếu
n
vượt ngoài phạm vi hợp lệ, hành vi chương trình là không xác định (undefined behavior).
Giá trị trả về
- Trả về một tham chiếu (reference) tới phần tử tại vị trí
n
.- Nếu sử dụng trong ngữ cảnh đọc: Trả về tham chiếu hằng (
const T&
). - Nếu sử dụng trong ngữ cảnh ghi: Trả về tham chiếu không hằng (
T&
).
- Nếu sử dụng trong ngữ cảnh đọc: Trả về tham chiếu hằng (
Đặc điểm
- Truy cập trực tiếp phần tử tại chỉ số
n
. - Chỉ số bắt đầu từ 0 (zero-based indexing).
- Có thể sử dụng cả đọc và ghi giá trị.
- Truy cập nhanh (O(1)).
- Cú pháp ngắn gọn, trực quan.
- Không an toàn nếu
n
vượt quá phạm vi mảng:std::vector<int> vec = {10, 20, 30};
std::cout << vec[10]; // Undefined behavior - Để an toàn hơn, sử dụng phương thức
.at(n)
, phương thức này kiểm tra giới hạn và ném ngoại lệ nếun
không hợp lệ:try {
std::cout << vec.at(10);
} catch (const std::out_of_range& e) {
std::cerr << "Lỗi: " << e.what() << '\n';
} - Dùng
[]
khi đảm bảo chắc chắn chỉ số nằm trong giới hạn. - Dùng
.at()
trong các chương trình cần độ an toàn cao, hoặc khi muốn dễ dàng xử lý lỗi.
Ví dụ
Truy cập giá trị (đọc):
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {10, 20, 30, 40};
std::cout << "Giá trị tại index 2: " << vec[2] << "\n"; // Output: 30
return 0;
}
Thay đổi giá trị (ghi):
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {10, 20, 30, 40};
vec[1] = 99; // Thay đổi giá trị tại index 1
std::cout << "Giá trị mới tại index 1: " << vec[1] << "\n"; // Output: 99
return 0;
}
Các hàm liên quan
at | Truy xuất phần tử tại vị trí chỉ định |
front | Truy xuất phần tử tại vị trí đầu tiên |
back | Truy xuất phần tử tại vị trí cuối cùng |