草庐IT

std_logic

全部标签

c++ - Eigen::aligned_allocator 因 std::unordered_multimap 而失败

我正在尝试在XCode6中编译这段代码:std::unordered_multimap,std::equal_to,Eigen::aligned_allocator>>trackingFailed;它失败了:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:1461:5:Static_assertfailed"Invalidallocator::value_type"Eigen3.2.2还需要用aligned_al

c++ - 具有 std::vector 和 std::set 属性的容器?

C++世界中是否存在具有这些属性的容器?元素是独一无二的,并在可定制比较器的帮助下有序提供随机接入运营商。我目前正在将我的数据收集到std::set中然后做一个std::copy(_set.begin(),_set.end(),std::back_inserter(_vec))能够随机访问有序集合。然而,规模可能会达到数亿。 最佳答案 如果可以选择Boost,请查看flat_setintheContainerslibrary.flat_set的接口(interface)与std::set相同但它提供随机访问迭代器,如std::vec

c++ - std::function/bind 就像没有标准 C++ 库的类型删除

我正在基于发布/订阅模式使用C++11开发一个简单的事件驱动应用程序。类有一个或多个onWhateverEvent()事件循环调用的方法(控制反转)。由于应用程序实际上是一个固件,其中代码大小很关键,灵active不是高优先级,“订阅”部分是一个包含事件ID和相关处理程序的简单表格。这是一个非常简化的代码:#includeenumEvents{EV_TIMER_TICK,EV_BUTTON_PRESSED};structButton{voidonTick(intevent){/*publishEV_BUTTON_PRESSED*/}};structMenu{voidonButtonPr

c++ - 如何在 C++ 中使用 std::optional

在C++17中引入了std::optional,我很高兴这个决定,直到我看到ref.我从Scala、Haskell和Java8知道Optional/Maybe,其中optional是一个monad并遵循monadic法则。C++17实现中不是这种情况。我应该如何使用std::optional,没有像map和flatMap/bind这样的函数,那是什么使用std::optional与例如返回-1或函数计算结果失败时的nullptr相比有优势吗?对我来说更重要的是,为什么std::optional没有设计成monad,有什么原因吗? 最佳答案

c++ - 打印二维 std::string 数组

我正在尝试用C++初始化一个井字棋盘,但输出总是给我六进制值。有没有办法将它们转换为实际的字符串值?#include#includeusingnamespacestd;intmain(){stringtab[5][5]={"1","|","2","|","3","-","+","-","+","-","4","|","5","|","6","-","+","-","+","-","7","|","8","|","9"};for(inti=0;i 最佳答案 您正在将tab[i]的值发送到cout,因此您将获得内存地址。您可能希望将项目

c++ - std::shared_ptr operator [] 等效访问

在C++17中,std::shared_ptr有一个运算符[]以允许索引基于vector的指针(http://en.cppreference.com/w/cpp/memory/shared_ptr/operator_at)如果这样的运算符不可用,我如何获得类似的访问,我仍然想对元素数组使用智能指针,例如:std::shared_ptrdata;data.reset(newunsignedchar[10]>;//usedata[3]; 最佳答案 像这样:data.get()[3]但是,请记住Nathan在评论中所说的话。std::sh

c++ - 传递 span<T> 和 std::array 作为参数有什么区别?

在他的C++CoreGuidelines,BjarneStroustrup建议在按引用传递数组时使用span。为什么不只传递一个std::array对象? 最佳答案 按值传递std::array将是复制它们。gsl::span的要点是采用它们的函数引用现有的数据数组。gsl::span能够获取运行时定义大小的数组。std::array在编译时固定。gsl::span不关心什么类型拥有数组;它只是一个指针+大小。因此,基于span的接口(interface)可以从std::vector、QVector和许多其他类型中获取数据。基于st

c++ - 随着 std::byte 的标准化,我们什么时候使用 void* 什么时候使用 byte*?

C++17将包含std::byte,一种用于一个原子可寻址内存单元的类型,在典型计算机上具有8位。在此标准化之前,在指向“原始”内存时已经存在一些困境-在一方面使用char*/unsignedchar*还是使用void*在另一边。现在,首选void*的原因之一已被删除-std::byte与char没有相同的含义;这是关于原始内存,而不是字符。所以,我的问题是:对于std::byte的时代,关于什么时候更喜欢它而不是void*以及什么时候有什么好的经验法则是不是反过来了?当然,当您处理旧代码或C代码时,您会受到它所接受内容的限制;我主要指的是新代码,您可以在其中选择所有类型。

c++ - 有什么方法可以跳过std::visit中一些变体类型的重载组合?

std::visit支持多种输入变体。但是,代码应该处理来自这些变体的类型的所有组合。有没有办法跳过不“有意义”的组合?例如:templatestructoverloaded:Ts...{usingTs::operator()...;};templateoverloaded(Ts...)->overloaded;intmain(){std::variantv1{'s'};std::variantv2{10};std::visit(overloaded{[](inta,intb){},[](inta,floatb){},[](inta,charb){},[](floata,intb){}

c++ - 使用作用域 queue::swap 清空 std::queue 是否违反任何规则?

我有很多使用队列的情况,队列的大小可以增长到数百个。不幸的是,如果有必要,没有清空队列的一次性解决方案。我想知道是否使用作用域队列进行交换,然后让作用域队列被销毁,是否会破坏任何内存分配/管理规则?以下片段是我所提议的示例。似乎有效,如果长时间使用多次,则不确定结果。#include#include#includeintmain(){std::queuefoo;foo.push(10);foo.push(20);foo.push(30);std::coutbar;swap(foo,bar);}std::cout 最佳答案 您的代码没