草庐IT

Block_size

全部标签

c++ - 使用 size_t 值反向遍历 vector

我想以相反的方向遍历vector的值。如您所知,vector的大小是size_t。当我使用以下代码时:for(size_tr=m.size()-1;r>=0;r--){x[r]=f[r];for(size_tc=r+1;c我将超出vector的范围,因为在递减r=0后r将变为4294967295。我没有更改r的类型,因为在我的项目中,我将警告视为错误,所以它应该是size_t或者我应该转换它,这并不有趣。 最佳答案 如果您真的想使用size_t进行索引,则循环可以制定如下。for(size_tr=m.size();r>0;r--){

c++ - 关于 RAII,C++ `try`/`catch` block 是否与其他 block 相同?

好吧,如果我使用RAII习惯用法来管理某些上下文属性*,如果我在tryblock的开头直接使用它,它会像我预期的那样工作吗?换句话说,如果我有这个:structraii{raii(){std::cout……我成功地使用了它:{raiido_the_raii_thing;stuff_expecting_raii_context();/*…*/}...如果我这样做,RAII实例会以同样的方式工作吗:try{raiido_the_raii_thing;stuff_expecting_raii_context_that_might_throw();/*…*/}catch(std::except

c++ - 权威的 “correct”方法,用于针对size_t测试循环变量时避免有符号/无符号警告

下面的代码生成一个编译器警告:privatevoidtest(){bytebuffer[100];for(inti=0;iwarning:comparisonbetweensignedandunsignedintegerexpressions[-Wsign-compare]这是因为sizeof()返回一个size_t,它是无符号的。我已经看到了许多有关如何处理此问题的建议,但是没有一个建议有很多的支持,也没有一个有任何令人信服的逻辑,也没有任何支持一个方法明显“更好”的引用。最常见的建议似乎是:忽略警告关闭警告使用类型为size_t的循环变量使用带有技巧的size_t类型的循环变量来避

c++ - 解锁对 STL vector::size 安全性的访问

我在STLvector上有几个作者(线程)和一个读者。正常的写入和读取是互斥保护的,但我想避免我拥有的循环上的争用,我想知道vector::size是否足够安全,我想这取决于实现,但因为通常vector动态内存是用于存储项目存储大小的内存不应在重新分配期间失效。我不介意有误报,在size>0之后,我实际上会锁定并再次检查,因此如果在另一个线程写入时读取size()不会出现段错误,它对我来说应该足够安全。 最佳答案 我不知道并发读取和写入整数段错误的实现(尽管C++03标准不禁止这样做,我不知道POSIX是否禁止)。如果vector使

c++ - C++ 字符串中 "size"和 "capacity"之间的区别?

我有ThinkinginC++中的这个片段。#include#includeintmain(){stringbigNews("IsawElvisinaUFO.");cout我得到如下所示的输出:IsawElvisinaUFO.thoughtIIsawElvisinaUFO.Size=33Capacity=44thoughtIIsawElvisinaUFO.I'vebeenworkingtoohard.Size=60Capacity=88我能弄清楚为什么大小会增加,但我无法弄清楚容量是如何增加的?我所知道的是Capacity是我们可以在其中进行Pushback的字符串缓冲区,但是该空间是

c++ - malloc 和堆 : extra memory for storing the size and linked list information?

我有一个关于heap和malloc的简单问题:当我们使用malloc分配一些内存空间时,如下所示:int*p;p=(int*)malloc(10*sizeof(int));它实际上在堆中分配了10个单词。但是,我的问题是:实际使用的内存空间真的是10个字?或者还有其他额外的空间需要存储内存大小的值?或者,甚至,因为堆的结构是链表,是否有其他内存空间用于存储指向堆中列表的下一个节点的地址? 最佳答案 它完全依赖于实现。a)它可以在每个分配的节点之前有几个字节,其中包含节点的大小、指向下一个节点的指针,可能还有前一个节点指针和节点类型。

c++ - 变量的 block 结构内存分配

for(inti=0;i在这里,我想知道变量x的内存是否会被分配两次,或者该值是否在退出第二个block后才重置并且内存只分配一次(对于x)? 最佳答案 从C编程模型的角度来看,x的两个定义是两个完全不同的对象。内部block中的赋值不会影响外部block中x的值。此外,循环的每次迭代的定义也算作不同的对象。在一次迭代中为任一x赋值不会影响后续迭代中的x。就实际实现而言,假设未进行优化,有两种常见情况。如果您打开了优化,您的代码可能会被丢弃,因为编译器很容易发现循环对它之外的任何东西都没有影响,除了i。两种常见的场景是变量存储在栈中

C++ "size_t"不需要 "cstddef" header ?

我正在通过C++Primer这本书学习C++,它说“size_t”在“cstddef”header中定义,但在本练习中:#includeusingnamespacestd;intmain(){intar[10];for(size_tx=0;x没有包含header,VisualStudio2017(和c++shell)编译程序没有错误。 最佳答案 size_t真的是一个灰色地带。std::size_t是sizeof的结果类型,但是sizeof是一个内置运算符,您可以在没有任何#include的情况下使用根本。考虑这个完整的小程序://

c++ - 警告 C4244 : 'argument' : conversion from 'SIZE_T' to 'DWORD' , 可能丢失数据

我需要在我的代码中有一组重载函数,但我得到了转换wanrings。这是一个测试代码:#includewindows.hvoidf(DWORDarg){...}//voidf(SIZE_Targ){}voidmain(void){DWORDdword=0;SIZE_Tsize_t=dword;f(size_t);}编译器给出警告:test.cpp(11):warningC4244:'argument':conversionfrom'SIZE_T'to'DWORD',possiblelossofdata如果我取消注释voidf(SIZE_Targ)我得到test.cpp(5):errorC

c++ - std::tr1::shared_ptr 是否会抛出 bad_alloc 并且在 try/catch block 中是个好主意?

我实际上正在制作一个简单的C++SFML游戏,我想学习更多关于C++编程的知识。现在我正在使用shared_ptr来管理资源。创建新资源时,我对shared_ptrs有一些疑问,例如:shared_ptrresource(newResource(World::LEVEL));根据boostshared_ptr(Y*p)throwsbad_alloc。我不知道std::tr1是否也这样做。而且我不知道我是否应该担心将shared_ptr放入try/catchblock中以检查是否抛出bad_alloc。这是一个好的编程习惯吗? 最佳答案