【发布时间】:2012-05-31 04:34:47
【问题描述】:
当您想以 C 数组的形式访问 std::vector 时,您可以从至少四种不同的方式中进行选择,如下例所示:
#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 */
}
}
我在大多数情况下找到的是&vec[0]。我认为它是最不优雅的,所以......为什么它是最常用的?是更高效还是更兼容?我找不到很多关于 data() 的文档。
【问题讨论】:
-
data()可能被认为是不兼容的,因为它是 C++11(这解释了稀缺的文档,因为主要的文档来源刚刚赶上新功能) ,虽然时间肯定会让这种不兼容消失,然后这是明确的路要走。