草庐IT

stl-algorithm

全部标签

c++ - STL String::length() 段错误

#include#include#include/*UsingSTL'sstringclassbecausetheproblemdoesnotreferanylimitsregardingthenumberofcharactersperline.*/usingnamespacestd;intmain(){stringline;vectorlines;while(getline(cin,line)){lines.push_back(line);}unsignedinti,u;unsignedintopening=1;//2iflastwasopening,1ifitwasclosingf

c++ - 将 STL 容器<T *> 转换为容器<T const *>

我正在寻找一种方法来制定具有以下内容的类:使用具有最大“常量”的指针的STL容器的接口(interface)但是它在内部改变了指向的对象与非常量模拟相比没有额外的运行时开销理想情况下,与非const版本相比,该解决方案将编译成没有额外的代码,因为const/非const-ness在这里只是对程序员的一种帮助。这是我到目前为止尝试过的:#include#includeusingnamespacestd;typedefintT;classC{public://Elementspointedtoaremutable,listisnot,'this'isnot-compilesOKlistco

c++ - STL算法和back_inserter可以预分配空间吗?

如果我有类似的东西:vectorlongVector={...};vectornewVector;transform(longVector.begin(),longVector.end(),back_inserter(newVector),[](inti){returni*i;});STL是否能够在处理和添加新元素之前在newVector中预分配空间?我知道这不是算法的要求,但是“好的”实现能够优化它吗?或者,对于这种情况,我应该更喜欢在之前添加newVector.reserve(longVector.size());吗?我不一定要问每个stdlib实现是否有(尽管如果有人知Prop体

算法中的C++入门及STL

目录1.C++入门1.1.常用头文件1.2.C++命名空间1.3.输入输出1.3.1.输入std::cin(cin) 1.3.2.输出std::cout(cout) 1.3.3.换行std::endl(endl) 1.4.C++结构体1.4.1.结构体声明1.4.2.结构体重载1.4.3.结构体函数1.4.3.1构造函数1.4.3.1.1.参数全初始化1.4.3.1.2.参数部分初始化1.4.3.1.3.简便写法1.4.3.2.结构体中的其他函数2.STL2.1.容器2.2.迭代器2.3.vector2.3.1.功能2.3.2.vector和普通数组的区别:2.3.3.动态扩展2.3.4.ve

c++ - RAII 和 C++ STL

我有一个案例,我希望将资源列表存储在std::vector中。在我看来,我的选择如下:给我的资源一个默认构造函数将它们存储为堆对象(并将它们包装在共享指针中)选项1使构造无效资源成为可能,选项2强制我使用堆。我是否遗漏了任何选项? 最佳答案 您不需要默认构造函数来拥有实例vector。唯一的限制是当类没有默认构造函数时,您不能将vector::resize与默认参数一起使用。vec.resize(20);//requiresdefaultconstructor但是你可以给vector::resize一个默认对象:std::vecto

c++ - STL 容器中的常量和非常量

STLvector模板将元素访问器定义为const和非const变体,例如:referenceoperator[](size_type__n){return*(this->_M_impl._M_start+__n);}const_referenceoperator[](size_type__n)const{return*(this->_M_impl._M_start+__n);}编译器什么时候决定使用一个版本而不是另一个版本?vector本身没有定义为常量,其中存储的元素也没有。所以给出两个函数:Af(inti)const{returnmyVector[i];}Af(inti){ret

c++ - 加载带有预排序数据的 STL 集,C++

我在VisualStudio2010中使用C++。我有一个STL集,我在程序关闭时将其保存到文件中。下次程序启动时,我将(排序的)数据加载回一个集合中。我正在尝试优化加载过程,但遇到了麻烦。我怀疑问题出在频繁的重新平衡上,我正在寻找避免这种情况的方法。首先,我没有进行任何优化,使用“set->insert(constvalue_type&x)”时间:~5.5分钟然后我尝试使用insert()版本,您在其中传递insert()位置的提示:iteratorinsert(iteratorposition,constvalue_type&x);大致上,我是这样做的:setMy_Set;set:

c++ - 从容器中元素的成员函数中累积结果

我有一个类,有一个返回计数的函数,如下所示:classCTestClass{public://...size_tGetCount()const;//...};在我程序的某处,我有一个该类对象的vector。我有一个函数来获取总计数(CTestClass::GetCount()的结果总和),像普通循环一样实现:size_tsum=0;for(vector::const_iteratorit=v.begin();it!=v.end();++it){sum+=it->GetCount();}我想重构它以使用标准库中可用的设施,于是我想到了accumulate。我已经能够通过使用函数对象(简单

c++ - STL的 vector 调整大小

我找不到这条信息。我在这里处理一个奇怪的情况,我在一个循环中,我可以在任何给定时间获得随机信息。此信息必须存储在vector中。现在每一帧我都必须设置这个vector以确保我不会超出空间(我正在使用索引将值写入vector中的随机点)。现在假设没有办法更改这段代码,我想知道,如果我发送的参数恰好是vector的大小,vector是否“忽略”resize()函数?我在哪里可以找到这些信息? 最佳答案 来自MSDN引用1Ifthecontainer'ssizeislessthantherequestedsize,_Newsize,ele

c++ - STL map中的后序遍历

我在gcccomper上使用STL映射,它使用树来存储键值对。迭代器以有序的方式前进,因此有序遍历非常容易。然而,我的输出要求之一是后序遍历。我被特别要求使用map。有什么办法可以做到吗? 最佳答案 没有标准的方法来访问std::map实例的“实际树结构”。此外,该标准不知道(或关心)map的元素在map可能使用的任何内部树中的确切排列方式。红黑树和AVL树都是std::map的有效实现,根据实际使用的情况,您会得到不同的后序遍历。在实践中,我希望它总是R-B或非常相似,但实现自由度通知了标准定义的接口(interface)。简而言