访问原始指针的INT矢量元素

Accessing elements of a vector of ints by raw pointers

本文关键字:元素 INT 原始 指针 访问      更新时间:2023-10-16

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

基本上,我有一个std::vector<int>,并且具有处理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());
}

预期的输出为:

5
4
3

这不是黑客,而是100%合法(预期)对向量的使用。在C 11中,应重写您的代码以利用data()成员 - 为空向量定义,与operator[]不同。

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

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

来自:http://www.cplusplus.com/reference/reference/vector/Vector/Vector/

就像数组一样,向量使用连续的存储位置为其 元素,这意味着他们的元素也可以使用 定期指示的元素偏移,并同样有效 就像数组一样。但是与数组不同,它们的大小可以动态变化, 由于容器会自动处理存储。

来自:http://en.cppreference.com/w/cpp/container/vector

元素是连续存储的,这意味着元素可以是 不仅可以通过迭代器访问,而且还使用普通的偏移 指向元素。这意味着指向一个元素的指针 向量可以传递给任何期望指向指向的功能 数组的元素。

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

相关文章: