草庐IT

stl_algobase

全部标签

c++ - 有状态仿函数和 STL : Undefined behaviour

我正在关注这个Functionobjectstutorial复制下面的意大利面:我无法理解以下内容:谓词应始终作为无状态函数对象来实现,以避免意外结果。无法保证算法在内部复制谓词的频率。因此,将谓词实现为有状态函数对象可能会产生意外结果。例子如下:#include#include#include#includeclasspredicate{public:predicate(intcondition):condition_(condition),state_(0){}booloperator()(int){return++state_==condition_;}private:intco

c++ - 只读结构中数据成员的分配,STL 集中的类

下面复制了我遇到的问题的最小示例:#includeusingnamespacestd;classfoo{public:intvalue,x;foo(constint&in_v){value=in_v;x=0;}booloperatorF;F.insert(y);//NowtrytomodifyamemberofthesetF.begin()->x=1;return0;}出现错误错误:在只读结构中分配数据成员‘foo::value’。我觉得我在这里遗漏了一些简单的东西,但为什么我无法在我的类中修改成员x? 最佳答案 set中的对象是不

c++ - 调整 STL vector 的大小是否会删除/使其以前的内容无效?

(示例程序)似乎没有,但我可以确定吗?//doesresizinganSTLvectorerase/invalidateit'spreviouscontents?#include#includeusingnamespacestd;voidprint(vector&t){for(inti=0;it;t.resize(12,9999);print(t);t.resize(15,10000);print(t);} 最佳答案 调整STLvector的大小可能需要重新分配底层存储。这可能会导致任意数量的元素被销毁和重新创建,并且所有迭代器都失

C++ STL vector : Push_back taking reference

从std::vector的cpp文档中,我看到了这一点:voidpush_back(constT&x);我知道push_back复制了我传递的对象。但是,为什么签名是constT&?通过查看这个,我最初认为它需要一个const引用我推送到vector. 最佳答案 另一种选择是voidpush_back(Tx);即按值取x。但是,这将(在C++03中)导致创建x的额外拷贝(push_back的参数中的拷贝)。通过const引用获取x可以避免这种情况。让我们看一下调用v.push_back(T())的堆栈:v.push_back(T()

C++ STL算法等于

一个特别有用的标准算法是std::equal,其定义如下:templateinlineboolequal(InputIterator1start1,InputIterator1end1,InputIterator2start2){while(start1!=end1){if(*start1!=*start2)returnfalse;++start1;++start2;}returntrue;}算法遍历[start1,end1)定义的范围并且[start2,start2+(end1–start1))并返回范围内的元素是否相等。请注意,该算法在两种不同类型的输入迭代器上进行了模板化。这是为

java - C++ STL 数据结构与 Java 的比较

我目前正在学习C++并试图适应它附带的标准数据结构,但它们看起来都很简单。例如,list没有我在Java中习惯使用的像get(index)这样的简单访问器。pop_back和pop_front等方法也不返回列表中的对象。所以你必须做类似的事情:Objectblah=myList.back();myList.pop_back();而不是像这样简单的东西:对象blah=myList.pop_back();在Java中,几乎每个数据结构都会返回对象,因此您不必进行这些额外的调用。为什么C++的STL容器是这样设计的?我在Java中做的像这样的常见操作对于C++不是很常见吗?编辑:抱歉,我想我

c++ - 如何为采用 STL 容器迭代器的函数提供函数签名?

我想写一个可以这样调用的函数my_func,但不关心v是一个std::vector,它可以是任何STL容器。有点像std::for_each:std::vectorv={...};my_func(v.begin(),v.end());但我无法弄清楚函数签名。voidmy_func(???i1,???i2){std::for_each(i1,i2,...);//dumbexampleimplementation}我不擅长模板编程,所以即使查看std::for_each的函数声明也无济于事。是否有一个简单的实现,或者这是否会从根本上弄乱模板变量? 最佳答案

c++ - 围绕现有数组的 STL 非复制包装器?

是否可以为现有的POD类型元素数组创建一个类似STL的容器,或者甚至只是一个STL样式的迭代器?例如,假设我有一个整数数组。如果能够调用一些STL函数,例如find_if、count_if或直接对此数组进行排序,将会很方便。非解决方案:复制整个数组,甚至只是对元素的引用。目标是非常节省内存和时间,同时希望允许使用其他STL算法。 最佳答案 您可以直接在常规C样式数组上调用许多STL算法-它们就是为此而设计的。例如:intary[100];//init...std::sort(ary,ary+100);//sortsthearrays

c++ - 在 Xcode : error during compilation: STL vector 中编译 C++ 类

我有一个C++类,它可以在带有gcc的Linux上和在visualstudio中的widows上正常编译。boid.h:#ifndefBOID_CLASS_HEADER_DEFINES_H#defineBOID_CLASS_HEADER_DEFINES_H#include"defines.h"classBoid{public://Initializetheboidwithrandomposition,headingdirectionandcolorBoid(floatSceneRadius,floatNormalVel);.....protected:...};#endif在boid.

c++ - 如何在没有内存操作的情况下在 C++ 和 STL 中定义二维数组?

在C++和STL中有多种方法可以在不进行内存操作的情况下定义二维数组,下面的代码说明了两种不同的方法:intmain(){/**************123456***************///Method1constintROW=2;constintCOL=3;intarray1[ROW][COL];for(inti=0;i>ARRAY;ARRAYarray2;vectorrowvector;for(inti=0;i我的问题是:还有其他方法可以定义二维数组吗?哪一个是最有效的?谢谢! 最佳答案 在C++11中使用std::a