要获取指向 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/