草庐IT

stl_algobase

全部标签

c++ - 为什么 'is_convertible' 在 <utility> std::pair (STL) 中?

template::value&&is_constructible::value>,enable_if_t::value&&is_convertible::value,int>=0>constexprpair(pair&&_Right)_NOEXCEPT_OP((is_nothrow_constructible::value&&is_nothrow_constructible::value)):first(_STDforward(_Right.first)),second(_STDforward(_Right.second)){//constructfrommovedcompatibl

c++ - 为什么动态创建 STL 容器被认为是不好的做法?

标题说明了这一点。不良实践示例:std::vector*FindPoints(){std::vector*result=newstd::vector();//...returnresult;}如果我稍后删除那个vector有什么问题吗?我主要用C#编程,所以在C++上下文中这个问题对我来说不是很清楚。 最佳答案 根据经验,您不会这样做,因为在堆上分配的越少,泄漏内存的风险就越小。:)std::vector也很有用,因为它以RAII方式自动管理用于vector的内存;现在通过在堆上分配它,您需要显式释放(使用deleteresult)

c++ - C++ STL 中的正则表达式

STL中是否有任何经过测试且无需任何额外编译器选项即可工作的native库?我尝试使用,但是编译器输出这个:在/usr/include/c++/4.3/regex:40包含的文件中,来自main.cpp:5:/usr/include/c++/4.3/c++0x_warning.h:36:2:error:#error此文件需要编译器和库支持即将发布的ISOC++标准C++0x。此支持目前处于试验阶段,必须使用-std=c++0x或-std=gnu++0x编译器选项启用。 最佳答案 G++4.3(可能还有更高版本)只是对头文件保持最大程

c++ - 为什么 C++ STL vector 在做很多保留时会慢 1000 倍?

我遇到了一个奇怪的情况。在我的程序中,我有一个循环将大量数据组合在一个巨大的vector中。我试图弄清楚为什么它运行得如此缓慢,尽管看起来我正在尽一切努力以高效的方式分配内存。在我的程序中,很难确定组合数据的最终vector应该有多大,但每条数据的大小在处理时是已知的。因此,我没有一次性保留和调整组合数据vector,而是为每个数据block保留足够的空间,因为它被添加到更大的vector中。就在那时,我遇到了这个可以使用下面的简单代码片段重复的问题:std::vectorarr1;std::vectorarr2;std::vectorarr3;std::vectorarr4;intn

c++ - 使用哪个STL容器?

这个问题在这里已经有了答案:InwhichscenariodoIuseaparticularSTLcontainer?(10个答案)关闭9年前。如果出现以下情况,我应该使用哪个STL容器:定期插入和删除数据。定期随机访问数据。例如:dataset(4,10,15)如果我想找到最接近9的数字,那么它应该返回10。我只存储一个整数。需要排序可以处理10万个数据集我想到了使用vector,但是vector的插入和删除很昂贵。vector如果我要使用列表,我必须在访问数据之前访问O(n)个元素。list我正在考虑使用set,因为如果它被排序会很好,但我不太确定使用SET的效率所以我希望有人能给

c++ - 为什么有些 STL 算法提供额外的 '_if' 函数而不是重载?

这个问题在这里已经有了答案:Whydoesthestandardlibraryhavefindandfind_if?(4个答案)关闭7年前。为什么一些STL算法提供额外的'_if'函数而不是重载它?//example:find(beg,end,val);find_if(beg,end,pred);难道他们不能只重载这些算法而不是创建额外的_if函数吗?

c++ - 哪个 STL C++ 容器用于固定大小的列表?

我有一个消费应用程序,它需要在列表中存储最多100个对象以提供给回调进行处理,因为如果消费者没有catch,保留旧数据将是多余的。当新数据到达时,它可以简单地覆盖最旧的元素。我正在考虑使用循环缓冲区容器并猜测它会是deque,但发现它不使用循环列表,也没有设置固定最大大小的选项。dequeue中有一个max_size方法,但文档说“由于系统或库实现限制,这是容器可以达到的最大潜在大小。”我可以使用其他容器吗?PS:我正在使用VisualC++2010express 最佳答案 没有标准库容器可以直接执行您想要的操作。但是,您应该看看B

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

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

c++ - STL 映射迭代器可以通过递增越界吗?

对于关联容器,++运算符能否将迭代器发送到集合末尾之后?例子:mapnew_map;new_map[0]=0;new_map[1]=1;mapnew_iter=new_map.begin();++new_iter;++new_iter;++new_iter;++new_iter;++new_iter;++new_iter;++new_iter;到此结束,是new_iter==new_map.end(),还是落入未知数?注意:我知道这是一团糟,而不是做事的方式。我正在处理一些WTF公司代码。 最佳答案 如果递增结束迭代器,结果是未定义

c++ - 对 C++ 堆分配器和 STL 进行碎片整理

我希望编写一个自碎片整理内存管理器,其中将一个简单的递增堆分配器与一个简单的压缩碎片整理程序结合使用。粗略的方案是从最低内存地址开始向上分配block,并保持簿记信息从最高内存地址开始向下工作。内存管理器会传回智能指针-boost的intrusive_ptr对簿记结构来说似乎是最明显的,然后它们本身会指向实际的内存块,从而提供一定程度的间接性,以便可以轻松地四处移动block。碎片整理程序将从“生成”书签开始压缩堆以加快进程,并且一次只对固定数量的内存进行碎片整理。指向block本身的原始指针在下一次碎片整理之前一直有效,因此可以自由传递,直到提高性能为止。这方面的具体应用是控制台游戏