草庐IT

vector_c

全部标签

c++ - STL vector 是 realloc 的更好版本吗?

我认为,在C++中,处理重新分配的更好方法是使用STLvector,因为它保证了连续的存储位置。我有几个问题想了解其中的区别:有没有我需要更喜欢的场景realloc在vector上?还有什么(除了vector)等同于realloc吗?在C++中?谢谢, 最佳答案 只是vector,保证有连续的内存。不是其他人。realloc是一个C内存管理函数。在C++代码中不鼓励使用它。Stroustrup告诉您原因:Whydoesn'tC++haveanequivalenttorealloc()?However,realloc()isonlyg

c++ - 缩小 vector

我的地形引擎(使用DirectX)有问题。我正在使用vector来保存细节block的顶点。当block详细增加时,vector也会增加。但是,当block减少其细节时,vector的大小不会缩小。那么,我的问题是:有没有办法缩小vector的大小?我试过这个:vertexvector.reserve(16); 最佳答案 如果从vector中弹出元素,它不会释放内存(因为这会使容器元素中的迭代器失效)。您可以将vector复制到新vector,然后将其与原始vector交换。这样就不会浪费空间。Swap具有恒定的时间复杂度,因为交换

c++ - 在 C++ 中的 main() 之前初始化 vector

我希望能够在main之前初始化大小为“SIZE”的vector。通常我会做staticvectormyVector(4,100);intmain(){//HereIhaveavectorofsize4withalltheentriesequalto100}但问题是我想将vector的第一项初始化为某个值,将另一个初始化为另一个值。有没有简单的方法来做到这一点? 最佳答案 试试这个:staticintinit[]={1,2,3};staticvectorvi(init,init+sizeofinit/sizeofinit[0]);另请

c++ - 为什么在 C++ 中找不到 vector

还有什么选择?我应该自己写吗? 最佳答案 有std::find()算法,它在迭代器范围内执行线性搜索,例如,std::vectorv;//Findsthefirstelementinthevectorthathasthevalue42://Ifthereisnosuchvalue,it==v.end()std::vector::const_iteratorit=std::find(v.begin(),v.end(),42);如果您的vector已排序,您可以使用std::binary_search()来测试vector中是否存在值,

c++ - GCC 和 VC++ 之间 std::vector::emplace_back 的区别

这个问题在这里已经有了答案:Canstd::vectoremplace_backcopyconstructfromanelementofthevectoritself?(3个答案)关闭7年前。我听说ModernC++的建议之一是使用emplace_back而不是push_back来追加到容器中(emplace_back接受容器中存储类型的任何构造函数的任何版本参数。根据标准草案N379723.3.6.5(1),说:Remarks:Causesreallocationifthenewsizeisgreaterthantheoldcapacity.Ifnoreallocationhappe

c++ - 在另一个进程中销毁共享的 std::vector

我正在尝试传输std::vector通过Boost.Interprocess到一个新的fork进程,这样子进程就可以取得它的所有权并销毁它。检索和读取vector有效,但是我在销毁它时遇到访问冲突。我收集到分配器开始了一些带有指针的状态,这些指针指向父地址空间并且在子地址空间中毫无意义。我应该如何在父级中创建该vector并在子级中正确销毁?父进程代码:namespaceip=boost::interprocess;templateusingip_allocator=ip::allocator;templateusingip_vector=std::vector>;intCALLBAC

c++ - 引用 vector 的部分片段?

我有一个黑盒C++函数,我无法访问它的源代码:voidblackbox(vector&input);此函数以未知方式修改输入vector的元素。我现在遇到的问题是我只想对vector的部分片段应用黑盒功能,例如,vector的最后500个元素。因此,这是我为实现此目标而编写的例程:vectorfoo(5,1000);vectorbar(foo.end()-500,foo.end());blackbox(bar);swap_ranges(foo.end()-500,foo.end(),bar.begin());此代码可能有效,但有更好的方法吗?如果我可以只为一段定义一个vector引用就

c++ - 使用 SWIG 将 C++ <vector> 包装为 python NumPy 数组

我有一个C++库,它定义了以下(以及更多类似的)类型:typedefstd::vectorDoubleVec;typedefstd::vectorDoubleVecVec;typedefstd::vectorIntVec;typedefstd::vectorIntVecVec;我正在尝试为处理此类对象的库创建一个python接口(interface)。正如标题所述,我希望我的界面能够与C++std::vector和numpyndarray相互转换。我都看过numpy.i由numpy人和std_vector.i提供来自SWIG人。问题在于numpy.i是为处理C/C++数组(而非C++v

c++ - 当包含在另一个 vector 中时如何使用 vector 包装类?

考虑一个来自第三方库的免费函数,它需要一个std::vector作为参数:voidfoo(std::vector&);现在,我围绕这种类型编写了一个包装器,以便我可以添加成员函数。能够使用foo()对于那种类型,我添加了一个访问函数。classWrapper{private:std::vector_data;public:std::vector&data(){return_data;}conststd::vector&data()const{return_data;}//...otherstuff};这样,我仍然可以使用foo():Wrappera;foo(a.data());但现在考

c++ - std::vector<bool> 优化实现

在documentation,我可以看到std::vector通过使每个boolean值占用一个位来优化空间效率。来自文档:Themannerinwhichstd::vectorismadespaceefficient(aswellaswhetheritisoptimizedatall)isimplementationdefined.这是否意味着它取决于编译器的实现?如果支持,我在哪里可以检查我的编译器是否支持它?他们为什么不希望它得到支持?这似乎是一个非常简单有效的实现。如果不是,这意味着什么?如果我希望进行此优化,它意味着什么?我正在使用TDMGCC工具集。