Khi bạn muốn truy cập std :: vector dưới dạng mảng C, bạn có thể chọn từ ít nhất bốn cách khác nhau, như bạn có thể thấy trong ví dụ này:std :: vector: vec.data() hoặc & vec [0]
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(42);
vec.push_back(24024);
{
int* arr = vec.data();
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
{
int* arr = &vec.front();
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
{
int* arr = &vec[0];
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
{
int* arr = &vec.at(0);
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
}
Tôi đã tìm thấy trong hầu hết các trường hợp là &vec[0]
. Tôi nghĩ đó là trang nhã nhất, vậy ... tại sao nó lại được sử dụng nhiều nhất? Có phải hiệu quả hơn hoặc tương thích hơn? Tôi không thể tìm thấy nhiều tài liệu về data()
.
'dữ liệu()' * có thể được coi là không tương thích theo nghĩa là C++ 11 (giải thích tài liệu khan hiếm, vì nguồn tài liệu chính chỉ là bắt kịp với các tính năng mới), mặc dù thời gian chắc chắn sẽ làm cho sự không tương thích này biến mất và sau đó đó là cách xác định để đi. –