您在使用.data()
成员函数的道路上正确无误,但这将为您提供一个类型std::vector<T>
的对象数组,而不是类型的对象数组T
。要真正展平嵌套向量,您需要自己进行。这样的事情可能会解决问题。
// 1. Compute the total size required.
int total_size = 0;
for (auto& vec : vectors) total_size += vec.size();
// 2. Create a vector to hold the data.
std::vector<T> flattened;
flattened.reserve(total_size);
// 3. Fill it
for (auto& vec : vectors)
for (auto& elem : vec)
flattened.push_back(elem);
// 4. Obtain the array
auto ptr = flattened.data();
对于较旧的编译器,您可以像这样遍历向量
for (std::vector<std::vector<T> >::iterator iter = vectors.begin();
iter != vectors.end(); ++iter) {
for (std::vector<T>::iterator iter2 = iter->begin();
iter2 != iter->end(); ++iter2) {
flattened.push_back(*iter2);
}
}
或者只使用普通的旧索引和.size()
成员函数。
在内部,std :: vector保持指向其元素的指针,因此从概念上讲,最外面的data()必须视为指针数组,而不是2D数组。因此,我们必须手动浏览并展平它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句