访问原始指针的INT矢量元素
Accessing elements of a vector of ints by raw pointers
我想知道下面的代码是否合法。
基本上,我有一个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
元素是连续存储的,这意味着元素可以是 不仅可以通过迭代器访问,而且还使用普通的偏移 指向元素。这意味着指向一个元素的指针 向量可以传递给任何期望指向指向的功能 数组的元素。
是的,是的,完全合法,打算以这种方式工作。
相关文章:
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何在一维数组中的每个元素中都有多个int值
- 使用SWIG将numpy数组元素(int)传递给c++int
- 从 C++ 中的 int ** 数组访问元素
- unordered_map<int,int>如何处理负面元素?
- 如何在一对集合的向量中插入元素?vector<pair<int,set<string>>>
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- 如何仅根据第二个元素对map<int,pair<int,int> >进行排序?
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- 如何将 int 数组的 1 个元素转换为字符串/字符
- 当我向 vector<int *> 添加元素时,我遇到了一些问题
- 将const int std ::数组的n元素复制到int矢量中.怎么做
- 有没有办法比较用 int 初始化的 char 类型的数组的 2 个元素
- 在函数返回时,清除了添加到一对int和字符串向量的矢量中的元素
- 访问矢量<矢量<int>>元素
- 将 vector<vector> 的最后一个元素移动到<int>开头
- 使用Stoi()将字符串数组元素转换为C 中的INT
- 在向量上找到第一对元素 (int) 并得到第二对元素 (struct)