草庐IT

c++ - "STL"和 "C++ Standard Library"之间是否有清晰的分隔定义?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:What'sthisSTLvs.“C++StandardLibrary”fightallabout?我非常习惯STL(“标准模板库”)这个术语,当我真正指的是C++标准库时,我发现自己经常使用它。因此,由于如今C++(-11)标准库中的几乎所有内容都是模板,我想知道:在C++标准库中是否定义了什么是STL,什么不是?也许是容器、流、算法等?或者我应该停止使用术语“STL”,因为它是SGI(对吗?)多年前用于其lib的历史性术语?这将是困难的...

c++ - 迭代器实现问题

我在尝试使用类似STL的内部迭代器创建双向链表时编写了以下代码。我现在只提供头文件,其中不相关的部分被暂时删除。我的问题是...STL以特定方式使用迭代器-具体来说,您在STL容器中导航,从.begin()迭代器向上但不包括.end()迭代器。为此,.end()迭代器必须位于容器末尾之后。鉴于我已经开始(这是主要问题),我将如何实现这种语义?目前的界面中是否缺少任何东西(关于迭代器类和应该存在于其中的东西)?代码如下:templateclassNode{Tdata;Node*next;Node*prev;};templateclassLinkedList{public:classIte

c++ - 未捕获的 std::exception 在核心中不正确的堆栈跟踪

这是我的代码:#include#includeusingnamespacestd;usingnamespacestd::tr1;usingnamespacestd::tr1::placeholders;classEvent{public:typedefstd::tr1::functionHandler;voidset(Handlerh){m_handler=h;}templatevoidset(T*obj,Fmemfn){set(std::tr1::bind(memfn,obj));}voidoperator()(){m_handler();}staticvoidfire(Event*

c++ - 使用 lower_bound、upper_bound 和 binary_search 查找具有相等成员字段的对象

我有一个看起来像这样的结构,structFoo{inta;};我有一个看起来像这样的结构vector,vectorfoos;所有Foo都使用STLsort()函数按整数a升序排序。现在我想获取成员字段a小于或等于给定数字的Foo对象,就像STLlower_bound()函数一样。问题在于STLlower_bound函数声明如下所示:templateForwardIteratorlower_bound(ForwardIteratorfirst,ForwardIteratorlast,constT&value,Comparecomp);所以当我想做类似的事情时,lower_bound(fo

c++ - vector::clear() 幕后和破坏

我研究过STLvector的实现。vector容器被实现为一个动态数组。方法clear()用于破坏vector中的所有元素,它将vector的大小设置为0,但容量保持不变。所以,如果我理解正确的话,所有的元素都被称为它们的析构函数,但是动态分配的内存仍然可用。为了仍然释放它,我们可以这样做:Vec.swap(vector());//Capacity=0.但是假设我们没有使用swap,只是做了一个clear。内部实现(如果我错了请纠正我)大约等于以下内容(以非常简化的方式)://Acontainedtype:structC{intm;C():m(123){}};C*arr=newC[10

c++ - 如何测试阻塞与异步?

我正在尝试使用googletest/mock测试阻塞与异步。不幸的是,我无法想出某种测试来确保异步在第一种情况下发生,而在第二种情况下发生阻塞。有没有办法确认std::future的行为是否正常?代码#include#includestaticunsigneda_slow_calc(){sleep(1);return1u;}TEST(Test_future,Ensure_async){//1.immediatelyreturnsstd::futureanswer=std::async(a_slow_calc);//2.std::future::getBLOCKSuntiltheresu

c++ - STL的第一个实现

我对看到C++标准模板库的第一个实现非常感兴趣。好吧,这是出于历史原因。我很想知道图书馆在这段时间里是如何演变的。正式可用的STL的第一个版本(实现)是什么?何时何地发表?我怎样才能得到它? 最佳答案 您可以在Stepanov为收集他的论文而设立的网站上了解他对泛型编程思想的发展:http://www.stepanovpapers.com/ 关于c++-STL的第一个实现,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 如何将绑定(bind)与通过引用传递的抽象类结合使用

我正在尝试使用std::transform和std::bind来简化循环。这是一些代码:classITest{public:virtualCPruebaPrueba(doublep,doubled=0)const=0;};voidfoo(constITest&test){std::vectorv;std::vectorvRes;//...//...std::transform(v.begin(),v.end(),back_inserter(vRes),bind(&ITest::Prueba,test,_1,0));//...}这不会编译。我正在使用VS2008SP1,我遇到了很多我不理

c++ - 有没有更好的方法来检查 STL 容器是否是多*容器

在为适用于各种标准C++11容器的框架编写单元测试期间,我跨过了我想以通用方式创建测试数据的问题。这里我需要知道关联容器C是否是multi*容器。例如。如果C是std::set或std::multiset。我搜索了所有这些容器的接口(interface),它们的共同点是它们都有一个insert(value_typeconst&)方法。但从我的角度来看,显着的区别在于multi*版本只返回一个迭代器,而“非”multi*版本返回一个std::pair。所以我选择这个作为差异化因素。我的结果代码是:#include#includetemplateclassis_multi_containe

c++ - vector 迭代器的增量/减量

NicolaiJosuttis的“C++标准库”第9章:STL迭代器指出:以下可能无法在某些平台上编译:std::vectorcoll;//sort,startingwithsecondelement//-NONPORTABLEversionif(coll.size()>1){std::sort(++coll.begin(),col.end());}Dependingontheplatform,thecompilationof++col.begin()mightfail.However,ifyouuseforexample,adequeratherthanavector,thecomp