草庐IT

std-ranges

全部标签

c++ - 获取错误 : 'mutex' in namespace 'std' does not name a type in MinGW mysys prompt

我已经从官方网站下载了MinGW并将其安装在我的Windows8.1机器上。运行g++--version给我g++.exe(GCC)4.8.1。我正在尝试在MinGW编译器中编译现有的代码库,但它因以下错误而失败:error:'mutex'innamespace'std'doesnotnameatypeprivate:std::mutexm_Mutex;^error:'condition_variable'innamespace's还有更多与锁定和线程相关的错误。!我能够在Cygwin-64中编译相同的代码库,没有任何问题。我需要在MinGW中成功构建和编译,以便创建一些与MSVS兼容

c++ - 在 std::function 上递归应用 std::bind 的问题

给定一个函数f(x,y,z)我们可以将x绑定(bind)到0,得到一个函数g(y,z)==f(0,y,z)。我们可以继续这样做并得到h()=f(0,1,2)。在C++语法中是#include#includevoidfoo(inta,longb,shortc){std::coutbar1=foo;std::functionbar2=std::bind(bar1,0,std::placeholders::_1,std::placeholders::_2);std::functionbar3=std::bind(bar2,1,std::placeholders::_1);std::funct

c++ - std::vector 以外的排名保持数据结构?

我面临一个应用程序,我必须设计一个具有随机访问(或至少优于O(n))的容器,具有廉价的(O(1))插入和删除,并根据插入时指定的顺序(等级)。例如,如果我有以下数组:[2,9,10,3,4,6]我可以在索引2上调用remove来删除10,我还可以在索引1上调用insert通过插入13。在这两个操作之后我会:[2,13,9,3,4,6]数字存储在一个序列中,插入/删除操作需要一个索引参数来指定应该插入数字的位置或应该删除的数字。我的问题是,除了链表和vector之外,什么样的数据结构可以维护这样的东西?我倾向于优先考虑下一个可用索引的Heap。但我一直看到一些关于FusionTree有用

c++ - 带有自定义比较器的 C++ std::map 用于保持比赛锦标赛

我想将比赛结果保存在某个容器中。对于每场比赛,我都需要存储球员姓名和分数。例如:map["player1:player2"]={2,4};我不仅想通过键"player1:player2"从这个容器中检索,甚至通过反向键"player2:player1"我想得到相反的结果。我将要使用std::map并围绕它做一些智能包装。也许有一些使用自定义比较器、自定义检索和保存功能的技巧。std::map是一个不错的选择还是其他更好的选择?编辑:我将这些评论总结成如下所示的解决方案:structMatch{std::stringplayer1;std::stringplayer2;intpoints

c++ - GCC 是否优化 std::tie 仅用于可读性?

假设我有一个std::tuple:std::tuplet={1,2,3,4};我想使用std::tie只是为了这样的可读性目的:inta,b,c,d;//inrealcontextthesenameswouldbemeaningfulstd::tie(a,b,c,d)=t;对比只使用t.get(0)等GCC会优化这个元组的内存使用还是会为a,b,c,d分配额外的空间?变量? 最佳答案 在这种情况下,我看不出有任何理由不这样做,在as-ifrule下编译器只需要模拟程序的可观察行为。快速实验usinggodbolt:#include#

c++ - for_each 和 ranged base for on 2D array

我尝试使用for_each和基于范围的for循环打印二维数组。我的程序是这样的:-#include#includeusingnamespacestd;intmain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};//for_each(begin(a),end(a),[](intx){cout为什么我的第一个for_each会抛出错误,为什么行需要&符号?它的类型是什么?row是指针吗? 最佳答案 for_each(begin(a),end(a),[](intx){coutbegin(a)产生一个int

c++ - std::vector::resize(size_type) 需要 CopyInsertable?

这个问题是在我回答thisanotherquestion的时候提出的.N333723.3.6.3“vector容量”说(在770页):voidresize(size_typesz);Effects:Ifsz,equivalenttoerase(begin()+sz,end());.Ifsize(),appendssz-size()value-initializedelementstothesequence.Requires:TshallbeCopyInsertableinto*this.然而,clang++saysit'sokaythoughTisnotcopyable.我认为resiz

c++ - 对于带有自动参数的 lambda,是否有 std::function 类型或类似类型?

当我将lambda分配给显式类型的变量时(例如,当它是递归的,以捕获函数本身时),我使用std::function。以这个愚蠢的“位计数”函数为例:std::functionf;f=[&f](intx){returnx?f(x/2)+1:0;};当我们使用自动参数泛化x时,如C++14泛型lambda中引入的那样,情况会怎样?std::functionf;f=[&f](autox){returnx?f(x/2)+1:0;};显然,我不能将auto放在function类型参数中。是否有可能定义一个足够通用的仿函数类来涵盖上面的确切情况,但仍然使用lambda来定义函数?(不要过度概括这一

c++ - 从库中的 std::exception 派生:Does a headers-only solution work for catching exceptions?

在我们的跨平台开源库中,我们派生自std::exception以定义可以在库代码和用户代码中捕获的自定义异常。我看到这实际上是一个推荐的过程,但在VisualStudio2015(或者更确切地说,伴随的新MSVC版本?)中,在实现类(warningC4275)中抛出警告-另请参见此处:Howtodllexportaclassderivedfromstd::runtime_error?当然我们可以忽略这个错误,但这对我来说似乎是错误的。与旧的VisualStudio版本相比,出现警告的原因似乎是std::exception曾经在旧的MSVC版本中导出,但同时不再导出。无论哪种情况,我都觉

c++ - 从 C 数组初始化 std::array 的正确方法

我从CAPI获取一个数组,我想将其复制到std::array以便在我的C++代码中进一步使用。那么这样做的正确方法是什么?我有2个用途,一个是:structFoof;//structfromCapithathasauint8_tkasme[32](andotherthings)c_api_function(&f);std::arraya;memcpy((void*)a.data(),f.kasme,a.size());还有这个classMyClass{std::arraykasme;inttype;public:MyClass(inttype_,uint8_t*kasme_):type