std::vector: vec.data() или &vec[0]

Если вы хотите получить доступ к 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().

24
задан CB Bailey 24 May 2012 в 20:05
поделиться