c – 在不破坏元素的情况下调整std :: vector的大小
我一直在使用相同的std :: vector< int>为了尽量避免一直分配deallocating.在几行中,我的代码如下:
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无法做到这一点. 有没有办法做到这一点?创建一个覆盖元素的本土实现是否有意义? 解决方法
在这种情况下,std :: vector不是解决方案.你不想重新调整/清除/(de)重新分配?别.
> fillVector()用每次迭代中已知的元素数填充’vector’. 好.使用简单的结构: 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数组将消耗大量存储空间!”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |