std::vector::data
#include <vector>
value_type* data() noexcept;
const value_type* data() const noexcept;
Trả về con trỏ trỏ tới phần tử đầu tiên của vùng lưu trữ bên trong vector.
Tham số
Không có tham số
Giá trị trả về
- Trả về một con trỏ kiểu
value_type*
(với non-const vector) hoặcconst value_type*
(với const vector). - Nếu vector rỗng, hàm trả về
nullptr
. - Có cả hai phiên bản của hàm
data()
, một phiên bản trả vềconst
pointer để đảm bảo rằng dữ liệu không bị thay đổi và một phiên bản trả về pointer khôngconst
để cho phép thay đổi dữ liệu.
Đặc điểm
- Hàm
data()
cho phép bạn truy cập phần tử của vector thông qua con trỏ. Điều này hữu ích khi bạn cần làm việc với các hàm C yêu cầu con trỏ mảng. - Hàm
data()
chỉ đơn giản trả về con trỏ tới phần tử đầu tiên của vector mà không thực hiện bất kỳ thao tác nào khác, do đó nó có hiệu suất cao. - Hàm
data()
thường được sử dụng để tương thích với các hàm C hoặc thư viện yêu cầu con trỏ mảng. - Hàm
data()
không kiểm tra tính hợp lệ của con trỏ được trả về. Nếu vector bị hủy, con trỏ trả về bởidata()
sẽ trở nên không hợp lệ. - Thường được sử dụng khi cần tích hợp vector với các API hoặc thư viện yêu cầu con trỏ tới mảng liên tiếp trong bộ nhớ, ví dụ khi làm việc với C-style arrays.
- Không sử dụng
data()
để thay đổi kích thước vector hoặc truy cập ngoài phạm vi. - Trong các phiên bản trước C++11, có thể sử dụng
&vec[0]
để đạt được chức năng tương tự nhưng không đảm bảo an toàn với vector rỗng.
Ví dụ
Truy cập và thay đổi dữ liệu qua data()
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// Truy cập dữ liệu bằng con trỏ từ data()
int* ptr = vec.data();
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << ptr[i] << " ";
}
std::cout << "\n";
// Thay đổi dữ liệu thông qua con trỏ
ptr[2] = 10;
for (int value : vec) {
std::cout << value << " ";
}
return 0;
}
Đọc dữ liệu từ một vector hằng (const
)
#include <iostream>
#include <vector>
void printVector(const std::vector<int>& vec) {
const int* ptr = vec.data();
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << ptr[i] << " ";
}
std::cout << "\n";
}
int main() {
const std::vector<int> vec = {10, 20, 30, 40, 50};
printVector(vec);
return 0;
}
Các hàm liên quan
begin | Trả về một iterator trỏ đến phần tử đầu tiên của vector |
front | Truy xuất phần tử tại vị trí đầu tiên |