繁体   English   中英

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

[英]Accessing elements of a vector of ints by raw pointers

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

基本上,我有一个std::vector<int>并且我有一个处理int数组的旧函数。 由于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

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

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

另外,上述技术不适用于vector<bool> ,因为后者不能遵循常规矢量的属性(这是一个可怕的主意,众所周知,现在大家都可以理解)。

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

就像数组一样,向量对它们的元素使用连续的存储位置,这意味着它们的元素也可以使用指向其元素的常规指针上的偏移量来访问,并且效率与数组相同。 但是与数组不同,它们的大小可以动态更改,其存储由容器自动处理。

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

元素是连续存储的,这意味着不仅可以通过迭代器访问元素,而且可以使用指向元素的常规指针上的偏移量对其进行访问。 这意味着可以将指向向量元素的指针传递给任何需要指向数组元素的指针的函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM