c++ - 获取指向集合中原始数据的指针,如 &(vector[0])

标签 c++ pointers vector set containers

要获取指向 vector 中数据的指针,我们可以使用

vector<double> Vec;    
double* Array_Pointer = &(Vec[0]);
Function(Array_Pointer);

是否有可能获得指向集合中数据的指针?我可以像上面那样将它用作数组指针吗?


如果不可能,从集合中提取 vector 的最佳方法是什么?我的意思是没有遍历所有元素。

最佳答案

不,这不一定可能。 C++ ISO 标准明确保证 std::vector 中元素的连续存储,因此您可以安全地获取第一个元素的地址,然后像指向原始数组一样使用该指针。标准库中的其他容器没有此保证。

这样做的原因是为了有效地支持对 std::set 的大多数操作,实现需要使用复杂的数据结构,如平衡二叉搜索树来存储和组织数据。这些结构本质上是非线性的,需要分配节点并将其链接在一起。在标准规定的时间限制(大多数操作的分摊 O(log n))中,即使不是不可能,也很难有效地使它与平面数组中的元素一起工作。

编辑:针对您的问题 - 没有办法从 std::set 构建 std::vector一些代码在某处迭代集合并复制元素。您可以通过使用 std::vector 范围构造函数来执行此操作,而无需自己显式使用任何循环:

std::vector<T> vec(mySet.begin(), mySet.end());

希望这对您有所帮助!

关于c++ - 获取指向集合中原始数据的指针,如 &(vector[0]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492894/

相关文章:

c++ - 如何生成具有继承和组合关系的C++类图?

c++ - VS2010 C++成员模板函数特化错误

具有特征的 C++ 可变参数模板,使用参数列表重载函数会产生意想不到的结果

c++ - 将指针容器转换为智能指针?

c++ - deep_const_ptr 复制构造函数

c++ - 如何使用 optional 元素初始化 C++17 对 vector

c++ - 在 C++ 2003 中重新调整本地分配的对象

c - C 中的嵌套结构和指针

c++ - 删除 std::shared_ptr 的条件

c++ - 未知类型的可变参数构造函数参数列表