草庐IT

VARIABLE_SIZE_STRUCT

全部标签

C++ 调试窗口显示“<incomplete type> for string variable

据我所知,我正在以一种相当正常的方式初始化一个字符串,当我调试时,我的IDE(CLion)中的变量窗口将其值显示为.我有一些简单的代码导致字符串变量Bob出现问题.#includeintmain(){std::stringBob="thisdoesn'tshowupinthevariableswindow";std::cout我不知道它有什么影响,但我会包含CMakeLists文件,它似乎是我可以使用的最简单的文件。cmake_minimum_required(VERSION3.8)project(testing123)set(CMAKE_CXX_FLAGS"${CMAKE_CXX_F

c++ - `std::condition_variable::wait_for` 经常调用谓词

考虑以下代码片段:#include#include#include#includeintmain(){std::mutexy;std::condition_variablex;std::unique_locklock{y};inti=0;autoincrement=[&]{++i;returnfalse;};usingnamespacestd::chrono_literals;//lock5sifincrementreturnsfalse//let'sseehowoftenwasincrementcalled?x.wait_for(lock,5s,increment);std::cou

具有非 size_t 整数的 std::array 的 C++ 模板参数推导

我正在尝试调整Avoidingstructinvariadictemplatefunction中提供的解决方案根据我的需要。但是,我无法理解G++的行为。考虑以下功能:templateintnextline(consttypenamestd::arrayar){return0;}然后调用nextline(std::array{1,0});与GCC提示不匹配eslong.cpp:Infunction‘intmain()’:eslong.cpp:10:38:error:nomatchingfunctionforcallto‘nextline(std::array)’nextline(std

c++ - 为什么随机访问迭代器的算术运算符接受/返回 int 而不是 size_t?

由于std::vector上的大多数操作都需要/返回size_t-这就是我用于索引的类型。但现在我已经启用所有编译器警告来修复一些我知道的有符号/无符号转换问题,这条消息让我感到惊讶:warningC4365:'argument':conversionfrom'size_t'to'__w64int',signed/unsignedmismatch它是由这段代码生成的:std::vectorv;size_tidx=0;v.insert(v.begin()+idx+1,0);我收到很多其他类似的消息,建议迭代器的算术运算符接受并返回int。为什么不是size_t?修复所有这些消息很痛苦,并

c++ - 如何在 C++11 中将容器 std::array<type, size> 用于多维数组?

例如,包含三个整数的一维数组可以定义为std::arraymyarray或myarray[3].有没有像std::array这样的容器对于像myarray[3][3]这样的多维数组? 最佳答案 一个关键部分是确保{}初始化工作类似于std::array,并尽可能合理地让自己保持pod状。与std::array的兼容性也很重要,什么比std::array更兼容??所以我的解决方案从std::array中生成多维数组小号:templatestructmulti_array_helper{usingtype=T;};templateusi

c++ - 为什么 std::condition_variable 使调度不公平?

我正在尝试创建一个简单的池对象,我想将对一组共享资源的访问或多或少公平地分配给任何请求它的线程。在Windows中,我通常会有一个Mutexes数组并使用bWaitAll=FALSE执行WaitForMultipleObjects(请参阅下面的windows_pool_of_n_t)。但我希望有一天能够将其移植到其他操作系统,所以我想坚持使用标准。在size()!=0上使用condition_variable的资源双端队列似乎是显而易见的解决方案(请参阅下面的pool_of_n_t)。但是由于我不明白的原因,该代码序列化了线程访问。我并不期待严格的公平性,但这几乎是最坏的情况——上次获

c++ - condition_variable::wait_for() 如何处理虚假唤醒?

Spuriouswakup各种平台都允许。为了解决这个问题,我们编写了以下循环机制:while(ContinueWaiting())cv.wait(lock);//cvisa`std::conditional_variable`object对于conditional_variable::wait_until()也是可以理解的。但是请看下面的例子:constautoduration=Returns_10_seconds();while(!Predicate())cv.wait_for(lock,duration);想象一下,虚假唤醒发生在1秒。尚未达到超时。它会再等10秒吗?这将导致无限

c++ - 为什么 std::copy_n 采用模板参数而不是 std::size_t?

这么简单的问题。templateOutputItcopy_n(InputItfirst,Sizecount,OutputItresult);为什么std::copy_n为要复制的元素数量取一个类型,而不是简单地std::size_t?我只是想不出一个理由。templateOutputItcopy_n(InputItfirst,std::size_tcount,OutputItresult); 最佳答案 在这种情况下,推测原始原理大多是徒劳的,但对于这种设计copy_n可以用负计数调用,例如int或ptrdiff_ttype,在这种情

c++ - std::multiset<int> 与 std::map<int, std::size_t> 用于保持多个可重复整数值

我想创建一个记录来保存关于的信息a)存在什么样的元素,b)出现的每种元素的数量在树的一个节点中。我会明确地只为叶节点存储这些信息,而父节点的信息可以通过组合它所有子节点的信息来获得(例如,子节点1有3个A对象,1个B对象,子节点2有1个A的对象,C的2个对象--parent有4个A的对象,1个B的对象和2个C的对象)。从父节点请求此信息时,我会小心不要先请求、使用和丢弃子节点的信息,然后再为其父节点请求,但是向上构造将是一个常见的手术。其他两个常见操作直接源self存储的内容:是否存在类型X的对象?和存在多少类型X的对象?还有如何存在多种对象?对象种类以整数表示,对象编号始终为整数值。

c++ - std::queue::size 的大 O() 顺序是什么?

std::queue类在size成员函数的复杂性方面并不清楚。它似乎是基于当时使用的数据结构实现。一个人会假设size是O(C),但它完全有可能是O(N)。显然,我可以保持自己的大小,但我宁愿只调用size。(修改问题):既然deque是默认容器,那么std::deque::size()的O()是多少? 最佳答案 至少自C++11以来,std::queue::size的复杂度isconstant:O(1)。根据§23.6.3.1/1,std::queue的底层容器必须满足SequenceContainer的要求,这一点得到了保证。,