C++ 通过原始指针访问整数向量的元素

C++ 通过原始指针访问整数向量的元素,c++,vector,stdvector,C++,Vector,Stdvector,我想知道下面的代码是否合法 基本上,我有一个std::vector,还有一个遗留函数,它处理ints数组。由于std::vector的元素总是连续的,所以代码应该总是可以工作的(它实际上在我的实现中可以工作),但对我来说,它仍然有点像黑客 #include <vector> #include <iostream> void LecagyFunction(int *data, int length) { for (int i = 0; i < length; i

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

基本上,我有一个
std::vector
,还有一个遗留函数,它处理
int
s数组。由于
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());
}

这不是黑客攻击,而是100%合法(和预期)使用vector。在C++11中,应该重写代码以利用
data()
member-它是为空向量定义的,与
操作符[]
不同

LecagyFunction(vector.data(), vector.size());

作为旁注,上述技术不适用于
vector
,因为后者不遵循正则向量的属性(一个可怕的想法,正如大家现在所理解的那样)。

这不是黑客行为,而是对vector的100%合法(和预期)使用。在C++11中,应该重写代码以利用
data()
member-它是为空向量定义的,与
操作符[]
不同

LecagyFunction(vector.data(), vector.size());
作为旁注,上述技术不适用于
向量,因为后者不遵循正则向量的属性(现在大家都知道这是一个糟糕的想法)。

来自:

与阵列一样,向量使用连续的存储位置来存储它们的数据 元素,这意味着也可以使用 在指向其元素的常规指针上的偏移量,并且同样有效 就像在数组中一样。但与阵列不同,它们的大小可以动态变化, 其存储由容器自动处理

发件人:

元素是连续存储的,这意味着可以 不仅可以通过迭代器访问,还可以使用正则表达式上的偏移量进行访问 指向元素的指针。这意味着指向 向量可以传递给任何需要指向 数组的元素

因此,是的,完全合法,并打算以这种方式工作。

来自:

与阵列一样,向量使用连续的存储位置来存储它们的数据 元素,这意味着也可以使用 在指向其元素的常规指针上的偏移量,并且同样有效 就像在数组中一样。但与阵列不同,它们的大小可以动态变化, 其存储由容器自动处理

发件人:

元素是连续存储的,这意味着可以 不仅可以通过迭代器访问,还可以使用正则表达式上的偏移量进行访问 指向元素的指针。这意味着指向 向量可以传递给任何需要指向 数组的元素


所以,是的,完全合法,并打算以这种方式工作。

C++11方法不仅仅是“简化”:与旧方法不同,它甚至适用于空向量。@TartanLlama,最初的问题是关于整数的,但我会澄清。Thx.C++11方法不仅仅是“简化”:与旧方法不同,它甚至适用于空向量。@TartanLlama,最初的问题是关于整数的,但我会澄清。谢谢。