草庐IT

c++ - 如何获取 std::map 的前 n 个元素

由于C++std::map中没有.resize()成员函数,我想知道如何获得最多包含n个元素的std::map。显而易见的解决方案是创建一个从0到n的循环,并使用第n个迭代器作为std::erase()的第一个参数。我想知道是否有任何解决方案不需要循环(至少在我的用户代码中不需要)并且更像是“STL方式”。 最佳答案 您可以为此使用std::advance(iter,numberofsteps)。 关于c++-如何获取std::map的前n个元素,我们在StackOverflow上找到一

c++ - 结合 boost::lexical_cast 和 std::transform

我想写这样的东西,不能编译:std::vectoras;std::vectorbs(as.size());std::transform(as.beginn(),as.end(),bs.begin(),boost::lexical_cast);但这行不通,所以我创建了一个仿函数来为我做这件事:templatestructlexical_transform{templateDestoperator()(constSrc&src)const{returnboost::lexical_cast(src);}};有更简单的方法吗? 最佳答案

c++ - 如何实现 std::auto_ptr 是复制构造函数?

回到我的疯狂AutoArraythingy...(从那里引用重要的部分:classAutoArray{void*buffer;public://CreatesanewemptyAutoArrayAutoArray();//std::auto_ptrcopysemanticsAutoArray(AutoArray&);//Noteitcan'tbeconstbecausethe"other"reference//isnull'doncopy...AutoArray&operator=(AutoArray);~AutoArray();//Nothrowswap//Note:Atthemom

c++ - 'powf' 不是 'std' 的成员

我在使用XCode编译库时遇到错误:'powf'isnotamemberof'std'包括在内。谁能给我解释一下哪里出了问题? 最佳答案 直到C++11,powf只是一个Microsoft-ism.它根本没有出现在ISO标准中,因此不太可能出现在XCode中,除非他们要适应Microsoft的怪异做法,我认为这不太可能。另一方面,pow成为C++库的一部分的时间更长,因为它在C库的早期迭代中并入了C++pre-11。改用它。自C++11起,powf确实出现在ISO标准中并且是std命名空间的一部分。尽管如此,还是有一些不兼容的实现,

c++ - 如何在 lambda 中使用模板类型参数?

是否可以在本地匿名函数中使用来自周围模板函数的模板类型参数?我很确定我不能声明模板lambda...例如,我将如何着手做这样的事情:templatevoidTrimString(std::basic_string&str,conststd::locale&loc=std::locale()){//std::isspaceaslambdaunarypredicate?autofn=[&loc](Tc){returnstd::use_facet>(loc).is(std::ctype_base::space,c);};//trimrightstr.erase(std::find_if(st

c++ - std::unique_ptr 编译器错误:派生类的成员无法访问基类的私有(private)成员

我得到CompilerErrorC2248当我尝试编译以下代码时:#include#includeusingnamespacestd;classdata{public:staticdataparse(){datad;data::parse(d);returnd;}list>l;private:staticvoidparse(data&node){}};intmain(){return0;}为什么?我该如何解决这个问题?注意:我使用std::shared_ptr而不是std::unique_ptr没有问题。 最佳答案 您需要为您的类型

c++ - 将对象转换为 std::unique_ptr

我有一个简单的菜鸟问题,我找不到答案:在C++中你如何转换一个普通对象inti;进入std::unique_ptr?std::unique_ptriptr=&i;//invalidstd::unique_ptriptr=static_cast>(&i);//invalid谢谢。 最佳答案 你不知道。delete无法删除该对象,这是unique_ptr将要执行的操作。你需要autoiptr=make_unique();在这里,我们将make_unique定义为一个与make_shared相同的效用函数,本来应该是Standard的,可

c++ - 等待 atomic_bool

我有两个线程和一个由第二个线程设置的标志。我可以使用atomic_bool,但我希望能够等待*在第一个线程上设置标志。我该怎么做?我猜我不能使用condition_variable,因为如果第二个线程在第一个线程开始等待之前调用notify_one,线程将不会唤醒。此外,检查标志是否已经设置应该相当快。我想这应该很简单,但我只是卡住了,所以我在这里问。提前致谢。*编辑:当然是阻塞,而不是忙等待。抱歉,如果不清楚。 最佳答案 在cbreak和Ravadre(注释)的帮助下,我从这里得到:intmain(){std::mutexm;st

c++ - 完全删除 std::map<int, string> 的内存

我有一张填满的map,现在我想彻底删除内存。我该怎么做?找不到与此主题相关的任何内容,抱歉,如果已经有人回答...我的代码是这样的:for(std::map::iteratorii=map.begin();ii!=map.end();++ii){deleteⅈ}但它不起作用。有人可以帮忙吗?问候,菲尔 最佳答案 正确的做法是不去做。当map被自动分配的任何资源销毁时,它会自动释放资源。除非您使用new分配值,否则您不会删除它们。{std::mapx;x[0]="str";}//noleakshere{std::mapx;x[0

c++ - 在C++中将字符串散列为整数

我想弄清楚字符串到整数的转换过程。我们正在做一个带散列的程序,其中要散列的键值是一个状态的名称。根据我的研究,atoi()似乎不起作用。我是否需要分解单词的每个字母并单独转换?我使用ASCII码吗?我是否完全走错了方向?我很迷茫,所以任何信息都会很棒。谢谢! 最佳答案 C++11引入了一个名为std::hash的实现定义的哈希函数在标题中它具有字符串类的特殊性std::string,std::wstring等就这么简单:#include#include//forstd::hash#includeintmain(){std::stri