Chuyển tới nội dung chính

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ặc const 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ông const để cho phép thay đổi dữ liệu.

Đặc điểm

  1. 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.
  2. 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.
  3. 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.
  4. 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ởi data() sẽ trở nên không hợp lệ.
  5. 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.
  6. Không sử dụng data() để thay đổi kích thước vector hoặc truy cập ngoài phạm vi.
  7. 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

beginTrả về một iterator trỏ đến phần tử đầu tiên của vector
frontTruy xuất phần tử tại vị trí đầu tiên