数组而不是vector的vector, push_back()的元素.c++
array instead of vector of vector, push_back() of elements. c++
我使用vector的vector方法,出于性能原因,我想将其更改为数组。然而,我未能在试图理解,我怎么能使用数组(动态)和推数据在数组的末尾,如果我不知道有多少数据正在读取我的while循环。下面是一个片段。你能解释一下如何在数组上执行它,因为push_back()仅用于向量吗?非常感谢。
std::vector<vector<double>> v1;
while (1)
{
..../* some code, break condition aswell*/
vector<double> tmp;
while ( .../*new data available*/ )
{
...
tmp.push_back(data);
}
v1.push_back(tmp);
}
A std::vector<T>
为动态数组。可以加快代码速度的是:
std::vector<vector<double>> v1;
while (1)
{
..../* some code, break condition aswell*/
v1.push_back(vector<double>());
while ( .../*new data available*/ )
{
...
v1.back().push_back(data);
}
}
如果所有的内部向量总是相同的大小,你可能不想要一个向量的向量,但你仍然可以使用它。
效率低下可能来自于必须维护一个连续的缓冲区并四处移动对象。如果你想在内存中存储大量数据,你可以使用std::deque
,尽管在你的情况下,不是所有的数据都是连续的,只是在每个内部向量和另一个向量本身。
如果你在开始push_back
之前知道内部向量中的数据大小,你可以使用reserve()
进行优化。
你的慢,假设有的话,可能是由糟糕的算法引起的,如果你在内存中访问大量数据,那么缓存会丢失。后者是一个复杂的主题,但可以大大提高性能。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- std::vector的包装器,使数组的结构看起来像结构的数组
- 为什么(-1)%vector::size()总是返回0
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- vector.back() 可以用来为向量的最后一个元素赋值吗?
- 在std::vector中实现back()
- std::vector back()的奇怪行为
- 修改向量后引用 vector.back() 的奇怪行为
- std::vector::back 和 vector::operator[ vector::size() - 1] 之间
- 为什么对std::vector::back()的调用会使我的程序崩溃