草庐IT

STL-Like

全部标签

c++ - STL map<char*,char*> 析构函数

我知道映射析构函数调用每个包含元素的析构函数。会发生什么map?我看不到这段代码在/usr/include/c++/4.4中的什么地方编辑:我应该说map喜欢http://www.sgi.com/tech/stl/Map.html 最佳答案 当map被摧毁,它包含的所有元素也被摧毁。如果元素是类类型,则调用每个元素的析构函数。但是,请牢记上面map中包含的内容。正如您所料,它不是字符串——它只是指向字符串的指针。琴弦本身并没有被破坏。只有指针是。delete永远不会在指针上调用。恰当的例子:mapstrings;char*key=n

c++ - 使用 STL 函数快速填充 vector 、映射和设置

我想用一些数据快速填充这些容器以进行测试。最好和最快的方法是什么?它不应该太复杂,因此短得不人道,但也不要冗长编辑伙计们,我认为你可以用memset做一些事情,知道vector有一个下划线数组?另外,map呢? 最佳答案 boost赋值库方式(http://www.boost.org/doc/libs/1_38_0/libs/assign/doc/index.html)使用命名空间boost::assign;std::vectorv;v+=1,2,3,4,5,6,7,8,9;std::mapm;insert(m)("Bar",1)(

c++ - 包含任意类型的任意 STL 容器的函数模板

我有一个任意的STL容器C,其中包含任意类型T的元素。我想创建一个std::vector,它具有所有元素的拷贝。最干净的方法是什么?templatevoidmyfunction(Ccontainer){/*DerivethetypeTofelementswithinthecontainer*/std::vectormystack;/*Iterateovercontainerandpush_back()theelementsintomystack*/} 最佳答案 vector和set等STL结构应该包含类型定义为T的value_typ

c++ - 对 STL 集使用比较器

检查以下代码:stringtoLowerCase(conststring&str){stringres(str);inti;for(i=0;ileagues;set::iteratoriter;leagues.insert("BLeague");leagues.insert("aLeague");//leagues={"aLeague","BLeague"}leagues.insert("ALeague");for(iter=leagues.begin();iter!=leagues.end();iter++)cout输出是:aLeagueBLeague这让我很震惊。我认为(并期待)输

C++ STL vector 不接受复制构造函数

我写了一个有vector的代码(c++,visualstudio2010),即使我声明了复制常量,但仍然显示没有声明复制常量这里是代码#include#includeusingnamespacestd;classA{public:A(){coutnothing;nothing.push_back(a);intn;cin>>n;}我得到的错误是Error1errorC2558:class'A':nocopyconstructoravailableorcopyconstructorisdeclared'explicit'c:\programfiles\microsoftvisualstud

c++使用STL从字符串中删除字符

我脑袋放个屁:我想删除std::string中换行符'\n'的所有实例。我宁愿使用STL而不是手动的、多嵌套的for循环;唯一的问题是我忘记了如何...将for(...){std::string::remove_if(...);};工作?我是否需要使用std::for_each(...,...,std::string::remove_if(...));?还是需要其他东西? 最佳答案 第一个想法:删除/删除成语:str.erase(std::remove(str.begin(),str.end(),'\n'),str.end());

c++ - 当 STL 容器对象的值不可复制构造时,如何将其附加/复制到另一个对象,例如标准::线程

我想将一个std::map容器对象移动到另一个。最简单的形式:#include#include#includeusingnamespacestd;intmain(){map>m1,m2;//m1isupdatedm1.insert(m2.begin(),m2.end());//但是它给出了error的页面:error:useofdeletedfunction‘std::thread::thread(conststd::thread&)’如何实现? 最佳答案 std::thread不可复制构造,您必须使用允许移动的迭代器:m1.ins

c++ - 如何在 C++ 中计算两个 STL 集的交集的大小

我得到了两组(来自的std::set),我想知道其中交集的大小。我可以使用中的std::set_intersection|,但我必须为它提供一个输出迭代器,以将交集复制到其他容器中。一个简单的方法是sets1{1,2,3,4,5};sets2{4,5,6,7,8,9,0,1};vectorv;set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(v,v.begin()));之后v.size()给出交集的大小。然而,交集也必须被存储,即使我们没有对它做任何事情。为了避免这种情况,我尝试实现一个虚拟输出迭代器类,

c++ - 模板和 STL

下面的代码表示一个基于std::vector的容器templatestructTList{typedefstd::vectorType;};templateclassList{privatetypenameTList::Typeitems;....}intmain(){Listlist;}是否可以模板化std::vector并创建一个通用容器,类似的东西?templatestructTList{typedefstl_container;};其中STL_container表示std::vector、std::list、std::set...?我想在创建时选择容器类型。Listlist;/

c++ - 如果键已经存在,为什么 STL 映射会插入另一个值,而不仅仅是更改它?

为什么我使用STL映射的程序在键已经存在时插入值而不是更改现有值?#include#includeusingnamespacestd;structCTest{inta,b,c;CTest(intA,intB,intC):a(A),b(B),c(C){}};booloperatorr.a)returnfalse;if(l.br.b)returnfalse;if(l.cr.c)returnfalse;returntrue;}structCTest2{booloperator>x;x[CTest(1,1,1)]["lol"]=CTest2(1,2);//x[CTest(1,1,1)]["lo