草庐IT

set_allocated

全部标签

c++ - 捕获 std::bad_alloc 的策略

所以我在开发过程中经常使用Qt并且喜欢它。Qt对象的通常设计模式是使用new分配它们。几乎所有示例(尤其是Qt设计器生成的代码)都绝对不检查std::bad_alloc异常。由于分配的对象(通常是小部件等)很小,这几乎不是问题。毕竟,如果您未能分配20字节之类的内容,那么您可能无法解决问题。目前,我采用了将“大”(大小超过一页或两页的任何内容)分配包装在try/catch中的策略。如果失败,我会向用户显示一条消息,几乎任何更小的消息,我都会让应用程序崩溃并出现std::bad_alloc异常。那么,我想知道这方面的学派是什么?检查每个new操作是否是好的策略?还是只有我认为有可能失败的

c++ - `std::set` 在每种情况下都会对元素进行排序吗?

这个问题在这里已经有了答案:Isthestd::setiterationorderalwaysascendingaccordingtotheC++specification?(5个回答)关闭5年前。来自cplusplus.com引用似乎std::set对元素进行排序。我需要对字符串进行排序,但我不确定它是否适用于每个平台和编译器。主要是GCC、MinGW、VC。 最佳答案 根据其定义,std::set是一个排序容器。它是标准的一部分。对其进行排序有助于保持它是一个集合,而不仅仅是一个任意集合。来源:http://www.sgi.co

c++ - SWIG 包装库中 __cxa_allocate_exception 期间的段错误

在为Ruby开发一个SWIG封装的C++库时,我们在C++代码内的异常处理过程中遇到了无法解释的崩溃。我不确定重新创建问题的具体情况,但它首先发生在调用std::uncaught_exception期间,然后在一些代码更改后,移至__cxa_allocate_exception在异常构造期间。GDB和valgrind都没有提供任何有关崩溃原因的见解。我找到了几个类似问题的引用资料,包括:http://wiki.fifengine.de/Segfault_in_cxa_allocate_exceptionhttp://forums.fifengine.de/index.php?topic

c++ - 当一个类在构造函数中动态分配自己时,为什么会发生堆栈溢出而不是 std::bad_alloc?

我创建了一个使用new递归创建自身的类(只是为了好玩!),预计由于无限动态分配(堆)这将抛出std::bad_alloc溢出)。但是发生堆栈溢出而不是std::bad_alloc。为什么会这样?classOverflow{private:Overflow*overflow;public:Overflow(){overflow=newOverflow();}};intmain(){Overflowoverflow_happens;//stackoverflowhappensinsteadofstd::bad_allocexeption}@Caleth询问如果我将newOverflow()

c++ - 为什么 std::set.insert() 返回一个非常量迭代器,但我无法修改它?

考虑这个代码示例:#include#includeusingnamespacestd;setstring_set;voidfoo(conststring&a){pair::iterator,bool>insert_result=string_set.insert(a);string&val=*(insert_result.first);val+="-inserted";}所以,撇开正确性不谈,比如不检查是否成功插入等等,这段代码看起来应该允许我在插入后修改字符串,但是编译器(VS2010)禁止将迭代器取消引用到非常量字符串(我们正在从VS2005迁移,它在没有警告的情况下通过了这一点)

c++ - "std::bad_alloc": am I using too much memory?

消息:terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():std::bad_alloc我查看了gdb回溯,这是我自己实现的最低级别的方法:/**getanarrayofvec3s,whichwillbeusedforrenderingtheimage*/vec3*MarchingCubes::getVertexNormalArray(){//UsedthesamearraysizetechniqueasgetVertexArray:wewantindicestomatchupvec3*array=newvec3[

c++ - 如何获取 std::set 的第一个元素

我是你们,我在我的软件中发现了一个奇怪的错误。在我从std::set中删除元素的while循环中,我希望始终获取第一个元素,直到容器为空:std::setnodes;//Fillnodesfor(inti=0;i我发现以这种方式实现第一个元素适用于gcc但不适用于MSVC,它在我尝试取消引用(*nodes.begin())迭代器时崩溃。std::set的两个实现是否表现不同?我想要一个没有实现差异的数据结构,可以吗?可能我必须为这种操作更改数据结构 最佳答案 您的代码在VS2010中运行良好,也许您应该更新您的vcc。

c++ - 为什么 SSE set (_mm_set_ps) 会颠倒参数的顺序

我最近注意到_m128m=_mm_set_ps(0,1,2,3);在转换为float组时将4个float倒序排列:(float*)p=(float*)(&m);//p[0]==3//p[1]==2//p[2]==1//p[3]==0union{_m128m;也是如此。float[4]一个;}也是。为什么SSE操作使用这种排序?这没什么大不了的,但有点令人困惑。还有一个后续问题:当通过索引访问数组中的元素时,应该按0..3的顺序还是3..0的顺序访问? 最佳答案 取决于你想要做什么,你可以使用_mm_set_ps或_mm_setr_p

c++ - 如何将 unordered_set 与自定义类型一起使用?

我是否需要为自定义类型创建自己的哈希函数?unordered_set没有我可以使用的默认值吗? 最佳答案 标准库包含std::hash的特化对于基本类型、指针和std::string(或者更确切地说,对于std::basic_string的所有特化)。不幸的是,该库不包含以下重要的new-from-old组合功能,但它是Boost的一部分,您应该将其复制到您的代码中:templateinlinevoidhash_combine(std::size_t&seed,constT&v){std::hashhasher;seed^=hash

c++ - set vs unordered_set 最快迭代

在我的应用程序中,我有以下要求-数据结构将只用一些值(不是键/值对)填充一次。这些值可能会重复,但我希望数据结构只存储一次。我将遍历上面创建的数据结构的所有元素100次。元素在迭代中出现的顺序无关紧要。约束1表明我必须使用set或unordered_set,因为数据不是键值对的形式。现在集合插入比unordered_set插入成本更高,但数据结构仅在我的程序开始时填充一次。我相信决定因素将是我能够以多快的速度迭代数据结构的所有元素。为此,我不确定set或unordered_set是否会更快。我相信标准没有提到这个事实,因为对于任何一种数据结构,这个操作都是O(n)。但我想知道哪个数据结