草庐IT

c++ - 奇怪的错误:在没有真正创建指针时使用已删除的函数 'std::unique_ptr<_Tp, _Dp>::unique_ptr

我有一个类,看起来像这样:templateusingVectorPtr=std::vector>;templateusingVectorRawPtr=std::vector;classItemsSet{//&items);~ItemsSet()=default;VectorRawPtrGetItems();VectorRawPtrGetSuitableItemsForPeriod(constIPeriod&period);doubleCalculateTotal();private:VectorPtr_items;};构造函数看起来像:ItemsSet::ItemsSet(Vector

c++ - 为什么 std::queue 使用 std::dequeue 作为底层默认容器?

如阅读cplusplus.com,std::queue实现如下:queuesareimplementedascontainersadaptors,whichareclassesthatuseanencapsulatedobjectofaspecificcontainerclassasitsunderlyingcontainer,providingaspecificsetofmemberfunctionstoaccessitselements.Elementsarepushedintothe"back"ofthespecificcontainerandpoppedfromits"fron

c++ - 为什么 std::atomic 的 compare_exchange 会引用期望值?

std::atomic::compare_exchange_*的原因是什么?通过引用获取期望值,而不是通过值获取期望值? 最佳答案 如果操作失败,compare_exchange_*会将expected更改为实际值。它使循环更简单一些。 关于c++-为什么std::atomic的compare_exchange会引用期望值?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1998

c++ - Qt Concurrent 或 std::async 用于新代码?

我正在考虑运行异步代码的两个选项:QtConcurrent和std::async.鉴于我正在使用Qt编写GUI应用程序,因此使用QtConcurrent是有意义的。然而std::async看起来也不错,并且得到了所有主要编译器的支持。我应该为新代码使用QtConcurrent还是std::async?比较两者时我还应该寻找什么? 最佳答案 GiventhatI'mwritingaGUIappwithQt,itmakessensetogowithQtConcurrent我想说,事情没那么简单。我个人会尽可能多地使用标准库。但是,需要考

c++ - STD 馆藏中引用文献的生命周期

对STD集合返回的元素(例如map)的引用有效多长时间?例如,在这段代码中:structEmployee{intsalary;stringname;//thekey};mapallemployees;...Employee&Joe=allemployees["JoeSmith"];Joe.salary=150;//change"JoeSmith"'ssalaryassert(allemployees["JoeSmith"].salary==150);//alwaystrue....allemployees["MarkJones"]=Employee();...//No"JoeSmith

c++ - 将唯一指针 vector 复制到新 vector 中

当我编译下面的代码时,出现编译错误:std::vector>tmpVec;for(constauto&it:hrzBoxTmpMap){for(constauto&it2:hrzBoxVec){std::copy_if(hrzBoxVec.begin(),hrzBoxVec.end(),tmpVec.begin(),[&](std::unique_ptr&p){return!(it.second==p->getTop()&&it.first!=p->getLeft());});}}编译错误为:/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../..

c++ - 如何获取 std::unordered_map 的最后一个元素?

如何获取std::unordered_map的最后一个元素?myMap.rbegin()和--myMap.end()是不可能的。 最佳答案 容器中没有无序的“最后一个元素”。您可能需要一个有序的容器,例如std::map并使用mymap.rbegin()->first访问最后一个元素(另见thispost)编辑:要检查您的迭代器是否会到达末尾,只需递增它(并可能将其保存在临时文件中)并根据mymap.end()检查它,或者,甚至更干净:if(std::next(it)==last) 关于

c++ - 仅在相等可用时排序

假设我们有一个vector对:std::vector>v;在哪里输入A只定义相等:booloperator==(Aconst&lhs,Aconst&rhs){...}你会如何对所有具有相同first的对进行排序?元素最终会关闭吗?明确地说,我希望实现的输出应该与这样的输出相同:std::unordered_multimapm(v.begin(),v.end());std::copy(m.begin(),m.end(),v.begin());不过,如果可能的话,我想:就地进行分类。避免为相等性定义散列函数的需要。编辑:额外的具体信息。在我的例子中,元素的数量不是特别多(我预计N=10~1

13、c++使用单例模式实现命名空间函数

本案例实现一个test命名空间,此命名空间内有两个函数,分别为getName()和getNameSpace();声明命名空间及函数namespacetest{conststd::string&getName()和();conststd::string&getNameSpace();}命名空间内实现单例类实现一个单例类,构造函数要为private,自身对象为private静态成员函数(才可以调用静态成员变量)namespacetest{//实现一个单例类,构造函数要为private,自身对象为privateclassThisNode{private:std::stringname_;std::s

c++ - 如何根据 `std::vector` 中的元素对 `std::set` 进行切片

有没有一种根据std::set中的元素对std::vector进行切片的好方法?换句话说,std::set中的元素包含我想要在vector中的索引。当然,我可以用代码完成这个:#include#include#include#includetemplatestd::vectorslice(std::vectorconst&x,std::setconst&I){autoy=std::vector();for(autoconst&i:I)y.push_back(x[i]);returny;}intmain(){autox=std::vector{1.2,2.3,3.4,4.5,5.6};a