草庐IT

Block_size

全部标签

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++ - 如何将一个 vector block 复制到另一个

我用数组来存储数据,但我用vector代替了,所以我想用C++运算符替换所有的C运算符。我用memcpy复制了一个内存块for(i=0;i它也适用于vector,我只想知道c++中是否有等效的函数?我尝试了拷贝:std::copy(tmp.data_[cols_*i],tmp.data_[cols_*i+rows],a.data_[cols_*(2*i+1)]);但我收到以下错误:error:invaliduseofmemberfunction(didyouforgetthe‘()’?)例如:我有一个2xnxn大小的数组,我正在使用for循环来创建一个nxn数组。例如我有1234567

c++ - 即使选择了调试构建,Qt Creator 的智能感知也会使#ifdef _DEBUG block 变灰

当我的代码中有这样的#ifdef#ifdef_DEBUGprintf("Thisisadebugbuild");#endifQtCreator将printf变灰,即使它是一个调试版本,当我运行它时“Thisisadebugbuild”被打印出来。智能感知似乎没有看到将通过命令行(即-D_DEBUG)传递给编译器的预处理器定义,而不是在头文件/源文件中定义。 最佳答案 以下内容在我的*.pro文件中运行良好:CONFIG(debug,release|debug):DEFINES+=_DEBUG切换构建类型也会切换灰色区域。不过,我使用

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的要求,这一点得到了保证。,

c++ - block 内变量的生命周期是多少?

Here和Here我发现block中的变量是在执行到该block时创建的,为了证明我试过这个:intmain(){{chara;printf("Addressofa%d\n",&a);}charb;printf("Addressofb%d\n",&b);}正如预期的那样,b首先被创建(因为外部block比内部block执行得更快),当执行到内部block时,a被创建。上述代码的输出:Addressofa2686766Addressofb2686767(在x86上测试(堆栈向下增长,因此首先创建具有更大地址的变量))。但是这个呢?intmain(){{chara;printf("Addr

c++ - 循环中的 Stroustrup 和溢出 size_type

我正在阅读BjarneStroustrup的“使用C++的编程原则和实践”,我需要对我在第25.5.3节中发现的令人惊讶的部分进行澄清。作者声称如果我们想遍历std::vector,然后使用像这样的循环变量for(vector::size_typei=0;i不如对vector使用迭代器安全类:for(vector::iteratorp=v.begin();p!=v.end();++p)因为,作为无符号类型,i可能会溢出。他指出使用迭代器的循环没有这样的限制。我有点困惑,因为我了解到size_type保证足够大以表示可能的最大vector,因此size_type类型的变量永远不会在这样的

C++ vector::size_type:有符号与无符号;整数与长

我一直在通过在不同平台上编译我的应用程序来对其进行一些测试,从64位系统到32位系统的转变暴露出许多问题。我大量使用vector、字符串等,因此需要对它们进行计数。但是,我的函数也使用32位无符号数,因为在许多情况下我需要显式使用正整数。我在处理看似简单的任务时遇到了问题,例如std::min和std::max,它们可能更系统化。考虑以下代码:uint32_tgetmax(){return_vecContainer.size();}看起来很简单:我知道一个vector不能有负数的元素,所以返回一个无符号整数是完全合理的。voidsetRowCol(constuint32_t&r_row

c++ - size_t ptrdiff_t 和地址空间

在我的系统上,ptrdiff_t和size_t都是64位。我想澄清两件事:我相信由于地址空间的限制,没有数组可以像size_t一样大。这是真的吗?如果是,那么是否可以保证ptrdiff_t能够保存最大数组中任何指针的减法结果? 最佳答案 不,没有这样的保证。例如,请参见此处:https://en.cppreference.com/w/cpp/types/ptrdiff_tIfanarrayissolarge(greaterthanPTRDIFF_MAXelements,butlessthanSIZE_MAXbytes),thatth

c++ - 搜索巨大的排序数据 block

我在磁盘中有大量数据记录,这些数据记录是根据某些键按排序顺序排列的。一次将数据一个block(数千条记录)读入内存。我必须搜索并显示与某个键匹配的所有记录。我在考虑一些基于二进制搜索的算法,但我在这里有一些限制。只能从block的开头在block内按顺序查找记录。具有相同键的记录可以跨越多个block(如图所示-8个跨度)。在二进制搜索中,如果我正在加载中间block并且如果第一条记录匹配,那么我必须扫描匹配block之前的block。谁能帮我设计一个可以在C++中运行的有效策略。使用线性搜索方法是否有效。+---+|1|Block1|3||3||4|+---+|4|Block2|6|