通过原始指针访问int的向量元素

Jab*_*cky 1 c++ vector stdvector

我想知道下面的代码是否合法.

基本上我有一个std::vector<int>,我有一个处理ints 数组的遗留函数.由于a的元素std::vector总是连续的,所以代码应该始终有效(它实际上适用于我的实现),但它对我来说似乎仍然是一个黑客.

#include <vector>
#include <iostream>

void LecagyFunction(int *data, int length)
{
  for (int i = 0; i < length; i++)
    std::cout << data[i] << std::endl;
}

int main()
{
  std::vector<int> vector;
  vector.push_back(5);
  vector.push_back(4);
  vector.push_back(3);
  LecagyFunction(&vector[0], vector.size());
}
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

5
4
3
Run Code Online (Sandbox Code Playgroud)

Ser*_*eyA 7

这不是一个黑客,而是100%合法(和预期)的矢量使用.在C++ 11中,您的代码应该被重写以利用data()成员 - 这是为空向量定义的,不像operator[].

LecagyFunction(vector.data(), vector.size());
Run Code Online (Sandbox Code Playgroud)

并且作为旁注,上面的技术将不起作用vector<bool>,因为后者不遵循常规向量的属性(一个可怕的想法,现在每个人都理解).