当你想把std::vector当做C数组来访问时,你至少可以选择四种不同的方法,就像这个例子中所示:
#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 的(这解释了文档稀缺的原因,因为主要的文档来源正在适应新功能),但时间肯定会消除这种不兼容性,然后它就是明确的选择。 - Christian Rau