草庐IT

stl-algorithm

全部标签

c++ - 如何摆脱使用 gdb "s"命令进入 STL_vector.h?

主题。编译:g++-g-Wall-oprogramprogram.cpp运行:gdb-tui程序谢谢,哈维尔。 最佳答案 如果您有GDB7.4或更高版本,则有一个skip命令,可让您跳过函数或整个文件。将文件或函数标记为跳过后,它将不会再次进入。来自GDB手册--SkippingOverFunctionsandFilesskip[linespec]skipfunction[linespec]Afterrunningthiscommand,thefunctionnamedbylinespecorthefunctioncontainin

c++ - 我可以轻松地覆盖 (STL) 迭代器的类别吗?

现在,我有一个类可以通过随机访问迭代器满足API要求。但是,我可以设想这样一种情况,即实现会发生变化,只能提供一个前向迭代器。因此,我想限制调用者使用随机访问功能。我知道我可以编写自己的实现(例如restricted_bar_iterator),但想知道是否有更简单的方法(即需要更少的编码)。classBAR{...};classFOO{public://Bad...clientsmayexpect'bar_iterator'toberandomaccess...typedefstd::vector::iteratorbar_iterator;bar_iteratorbegin_bar

c++ - 为什么 std::copy 或 std::swap 不需要 <algorithm>?

根据这个cplusplus.com页,std::copy在header,原样std::swap然而这有效:#include//std::cout#include//std::vector#include//std::ostream_iterator()#include//rand(),srand()//NOTincludingintmain(){srand(time(NULL));constintSIZE=10;std::vectorvec;for(inti=0;i(std::cout,""));std::cout我唯一能想到的是它们是由导出的也...但是为什么我们需要标题吗?

c++ - 如何将标准生成器传递给 STL 函数?

#include#include#includeintmain(){std::vectora={1,2,3};std::mt19937generator;std::random_shuffle(a.begin(),a.end(),generator);}我正在尝试使用g++-std=c++0x编译此代码,收到以结尾的巨大编译器转储/usr/include/c++/4.9.2/bits/random.h:546:7:note:candidateexpects0arguments,1provided有什么正确的方法吗? 最佳答案 std

c++ - 有没有办法防止在 STL unordered_map 上插入或删除?

我经常使用带有固定/常量键但可变值的unordered_maps。示例:如果您有一个enumDimension{X,Y},您可能希望为每个存储一个数据点,但不允许对map进行插入或删除。更新正常。初始化示例:typedefstd::unordered_mapDimension_To_Size_Map;//assumestd::hashhastemplatespecialisationforenumDimension_To_Size_Mapdimension_To_Size_Map={{Dimension.X,0},{Dimension.Y,0}};dimension_To_Size_M

c++ - 显示 STL 数据时缺少面孔

我为ASCIISTL格式编写了一个简单的解析器。当我尝试使用提供的法线渲染三角形时,生成的对象缺少许多面:它应该是这样的:我已经尝试过的:明确禁用背面剔除(尽管之前不应该启用)确保启用了深度缓冲区这是一个重现错误的最小示例程序:#include#include#include#includeintmain(intargc,char**argv){SDL_Init(SDL_INIT_VIDEO);intscreen_w=1280,screen_h=720;SDL_Window*win=SDL_CreateWindow("test",20,20,screen_w,screen_h,SDL_

c++ - std::copy_n 不改变目标 vector 大小

如果我为vector保留一些空间,然后使用std::copy_n()在其中复制一些值,我会正确复制并访问这些值,但是vector的大小仍然为零。这是预期的行为吗?我是否应该改为调整vector的大小,即使它效率不高?#include#include#includeintmain(){std::vectorsrc,dest;for(doublex=0.0;x测试的编译器:clang、gcc、VisualC++ 最佳答案 butthesizeofthevectorisstillzerostd::copy_n不会改变容器的大小,只是复制值

c++ - 在可变参数模板中实现 STL 函数

我一直在做一个小项目来跟上可变参数模板的速度。我实现了一个小的多维数组。我现在想定义一个对给定位置的最近邻居进行操作的函数——是否有一种优雅的方法来检索数组中给定位置的邻居的值?templatestructMArr{typedefstd::array::type,size>type;std::array,size>data;MArr&operator[](inti){returndata[i];}};templatestructMArr{typedefstd::arraytype;typedata;T&operator[](inti){returndata[i];}};附录:我有点清楚

C++/STL 我应该使用哪种算法来检查容器是否有重复项?

是否有任何STL算法可以判断容器是否具有重复元素(使用operator==或给定谓词)?让我们考虑这两个vector:std::vectorv1{1,2,3};std::vectorv2{1,2,1};我希望有这样的功能:std::is_exclusive(v1.begin(),v1.end());//returningtruestd::is_exclusive(v2.begin(),v2.end());//returningfalse有这么简单的功能吗?我找不到任何(找到std::unique,但这会修改​​vector...)注意:我不是在问如何“检查容器是否有重复项”,我知道我该

c++ - 使用具有未定义行为的(STL)拷贝?

在评估中,我选择了选项LINEI上的运行时错误。没有未定义行为这样的选项,尽管我认为这是正确的选择。我不确定,但我认为评估有误。我编译并运行了该程序,它确实打印了3,9,0,2,1,4,5,使用三个不同的编译器(Cpp.sh,here和本地MacOSX).程序是否因LINEI存在未定义行为?#include#include#includeusingnamespacestd;voidprinter(inti){coutv1(mynumbers,mynumbers+7);copy(mynumbers,mynumbers+7,v1.end());//LINEIfor_each(v1.begi