大佬教程收集整理的这篇文章主要介绍了c – 在不破坏元素的情况下调整std :: vector的大小,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
std::vector<int> myVector; myVector.reserve(4); for (int i = 0; i < 100; ++i) { fillVector(myVector); //use of myVector //.... myVector.resize(0); }
在每次迭代中,myVector最多将填充4个元素.为了制作高效的代码,我想总是使用myVector.但是,在myVector.resize()中,myVector中的元素正在被销毁.我知道myVector.clear()会产生同样的效果.
我想如果我可以覆盖myVector中的现有元素,我可以节省一些时间.但是我认为std :: vector无法做到这一点.
有没有办法做到这一点?创建一个覆盖元素的本土实现是否有意义?
> fillVector()用每次迭代中已知的元素数填充’vector’.
>向量在内部表示为T *类型的连续内存块.
>您不希望每次(dE)分配内存.
好.使用简单的结构:
struct upTo4ElemVectorOfInts { int data[4]; size_t elems_num; };
并修改fillVector()以保存其他信息:
void fillVector(upTo4ElemVectorOfInts& veC) { //fill vec.data with values vec.elems_num = filled_num; //save how many values was filled in this iteration }
以同样的方式使用它:
upTo4ElemVectorOfInts myVector; for (int i = 0; i < 100; ++i) { fillVector(myVector); //use of myVector: //- myVector.data contains data (it's equivalent of std::vector<>::data()) //- myVector.elems_num will tell you how many numbers you should care about //nothing needs to be resized/cleared }
附加说明:
如果您想要更通用的解决方案(对任何类型或大小进行操作),您当然可以使用模板:
template <class T,size_t Size> struct upToSizeElemVectorOfTs { T data[Size]; size_t elems_num; };
并调整fillVector()以接受模板而不是已知类型.
这个解决方案可能是最快的.你可以这样想:“嘿,如果我想填充100个元素?1000?10000?那么呢?10000-elem数组将消耗大量存储空间!”.
无论如何它会消耗. Vector会自动调整大小,并且此reallocs不受您的控制,因此效率非常低.如果您的阵列相当小并且您可以预测所需的最大大小,请始终使用在本地堆栈上创建的固定大小的存储.它更快,更高效,更简单.当然这不适用于1.000.000元素的数组(在这种情况下你会得到Stack Overflow).
以上是大佬教程为你收集整理的c – 在不破坏元素的情况下调整std :: vector的大小全部内容,希望文章能够帮你解决c – 在不破坏元素的情况下调整std :: vector的大小所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。