草庐IT

STL-Like

全部标签

c++ - 通过 STL 或 Boost 引入虚拟参数

假设有人想用随机数填充一个vector。则有如下明显的解决方案:vectorresult;result.resize(n);for(inti=0;i好的,它显然有效,但我想了解摆脱for循环的最简单的STL/Boost方法是什么。使用std::transform很诱人,但它需要一个带有一个参数的函数。有什么好的STL方法可以在函数中引入伪参数吗? 最佳答案 C++标准库有std::generate()和std::generate_n();例如:#include#include#include#include#includeintge

C++——如何从 STL 容器中有效地删除具有这种条件的元素?

给定以下代码,structStudent{intscore;}queuestdQueue;如果学生的分数低于前一个学生,我想从列表中删除学生。如何高效地做到这一点?例如S1(100)获取S1(100) 最佳答案 您可以编写自定义谓词并使用remove_if。谓词可以是一个仿函数,它总是存储前一个Student的score。像这样:classScoreLessThanPrevious{public:ScoreLessThanPrevious():isFirst(true),previousScore(0){}booloperator(

c++ - 未初始化的类字段和 STL 容器

在将对象放入其中之前,STL默认分配器是否将原始内存清零?请参阅此代码。评论反射(reflect)了我平台上的行为。#include#includestructFoo{Foo(){}//nisn'tinitializedintn;};intmain(){std::vectorv(2);//zeroedstd::cout是否可以禁用清零原始内存?注意,它与初始化POD的值不同。 最佳答案 它可能会清零内存。它可能不会。它可能会从您最喜欢的已经清零的操作系统中恢复它——我知道Windows有清零内存的习惯。有一件事是肯定的-它没有定义,

c++ - 以两种数据类型作为参数的堆栈 STL

本程序取自cplusplus.com#include#include#include#includeusingnamespacestd;intmain(){dequemydeque(3,100);//dequewith3elementsvectormyvector(2,200);//vectorwith2elementsstackfirst;//emptystackstacksecond(mydeque);//stackinitializedtocopyofdequestack>third;//emptystackusingvectorstack>fourth(myvector);co

c++ - STL 容器要求

标准是否要求some_container::value_type是T?我问这个问题是因为我正在考虑采用不同的方法来实现符合STL标准的二维动态数组。其中之一是拥有2Darray::value_type是2Darray_row或类似的东西,其中数组将迭代为行的集合(有点简化。我的实际实现允许在3个方向上迭代) 最佳答案 容器要求有点古怪,因为它们实际上没有被任何通用算法使用。从这个意义上说,这并不重要。也就是说,要求是针对容器的接口(interface),而不是容器的实际实例化方式。即使是非模板类也可以符合各种要求,事实上也确实如此。

c++ - STL 容器和内存管理——对象列表与对象指针列表

我已经仔细研究了关于这个主题的其他一些问题,但(据我所知)没有一个解决如何正确地从包含动态分配内存的STL对象列表与包含动态分配内存的STL对象列表中删除项目的问题不包含动态分配的内存。我想使用对象列表。以这个对象为例(它不包含动态分配的内存):classMyPoint{public:MyPoint(int_x,int_y){x=_x;y=_y;}private:intx;inty;};所以我可能会创建一个对象列表(不是指向它们的指针),向其中添加内容,然后删除一个元素:listmyList;myList.push_back(MyPoint(3,4));myList.push_back

c++ - 将参数包传递给 emplace STL 函数会导致编译错误

根据emplace_back的定义,voidemplace_back(Args&&...args);是一个可变模板函数。所以,我写了以下内容:#includeintmain(){std::vectormyvector2(10,0);myvector2.emplace_back(1,2,3,4,5,6);}编译器提示:g++-std=c++0xstlstudy.cc‘Internalcompilererror:Errorreportingroutinesre-entered.Pleasesubmitafullbugreport,withpreprocessedsourceifapprop

c++ - 接受任何类型的 STL 容器并使用其值类型

我有一个函数可以在任何类型的STL容器上运行,并且需要将容器的元素类型传递给另一个模板函数。实际上,当我说任何容器类型时,我并不是这个意思。严格来说只有vector和数组。我有这样的东西:templateintProcessData(Tdata){returnDoInternalProcessing(data.data(),data.size());}MSVC11接受此代码但gcc不接受。它出什么问题了?对于gcc,我也考虑过将值类型作为参数,但是这将要求调用者指定T(容器类型),这对于std::array来说非常笨拙,并且此函数的主要目的是提供一个非常简单的接口(interface)

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