草庐IT

small_vector

全部标签

c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?

我有一种情况,我正在通过一个vector行进,做一些事情:std::vector::iteratoriter=my_list.begin();for(;iter!=my_list.end();++iter){if(iter->doStuff())//returnstrueifsuccessful,falseo/w{//Keepgoing...}else{for(;iter!=m_list.begin();--iter)//...Thiswon'twork...{iter->undoStuff();}}}在正常情况下-假设一切顺利-我一直前进到my_list.end()并成功结束循环。但

c++ - 在运行时设置 vector 类型

我有一个程序需要在程序执行时设置vector的类型(根据配置文件中的值)。我试过这个:inta=1if(a==1)vectortest(6);elsevectortest(6);test.push_back(3);但这给了我:Error1errorC2065:'test':undeclaredidentifier我不完全确定为什么,但我认为这是因为vector实际上并不是在编译时决定的,因此编译器在编译其余代码时无法使用它。有没有一种方法可以像我上面尝试的那样在运行时决定vector的类型?我曾尝试在if之外创建一个版本,然后将其删除并在IF内重新编写新版本。但是,这感觉不对,无论如何

c++ - 为什么STL中的 vector 没有+=运算符

我很好奇?什么高本底逻辑背后没有实现:result+=vector1;result和vector1都是STLvector。注意:我知道如何实现那个位,但我需要知道设计STL的圣人在选择不实现此功能时使用的是什么逻辑? 最佳答案 您希望result包含什么,将原始result与vector1或元素级+连接起来的结果=(无论这对底层类型意味着什么),如果大小不匹配,可能会默认初始化成员?是的,这是一个答案;)。运算符重载仅应在运算的含义对于基础类型而言明确且实用的情况下使用,并且它会为适当命名的函数调用提供显着的符号简洁性。请注意,由于

c++ - 用于 vector 和矩阵计算的高性能数学库

在哪里可以找到vector和矩阵计算的快速库?我需要高性能。更新:我需要它来进行游戏计算。 最佳答案 寻找Blaze.还要检查并行核心设置中的基准标记。它当然是最快的。 关于c++-用于vector和矩阵计算的高性能数学库,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5935075/

C++ std::vector std::sort 无限循环

每当我尝试对导致无限循环的对象vector进行排序时,我都会遇到一个问题。我正在使用传递给排序函数的自定义比较函数。我能够通过在两个对象相等而不是true时返回false来解决问题,但我不完全理解解决方案。我认为这是因为我的比较函数违反了cplusplus.com上概述的这条规则:Comparisonfunctionobjectthat,takingtwovaluesofthesametypethanthosecontainedintherange,returnstrueifthefirstargumentgoesbeforethesecondargumentinthespecific

c++ - 使用 std::map 而不是 vector<pair<string, string>> 我会看到性能提升吗?

我目前有一些代码在使用vector的pair.这用于存储来自XML解析的一些数据,因此,这个过程在某些地方非常慢。在尝试加快整个过程方面,我想知道从vector>切换是否会有任何性能优势。至std::map?我可以对其进行编码并运行分析器,但我想我会先看看是否能得到一个表明一些明显的性能提升的答案。我不需要做任何排序,我只是将项目添加到vector中,然后在稍后阶段迭代内容并进行一些处理——我不需要排序或任何类似的东西。我猜也许我不会获得任何性能提升,但我从未真正使用过std::map之前,所以如果不询问或编写代码我就不知道了。 最佳答案

c++ - 为什么vector前面没有push/pop?

在C++、STL中,我们有模板类.我们知道它支持O(1)随机访问和尾部修改。我的问题是为什么我们不在中定义push_front或pop_front?一种解释是,如果我们想压入/弹出一个vector前面的元素,我们必须将数组中的每个元素移动一步,这将花费O(n)。.但我认为情况并非总是如此。考虑到如果我们实现使用圆形数组,我们可以实现O(1)从vector的前端和尾部插入/弹出,而不会失去O(1)的能力随机访问。所以我个人想不出任何理由而不是不实现push_front的小开销。/pop_front对于.有什么想法吗? 最佳答案 我们已

c++ - std::vector 中的重复元素

我有一个std::vector,我想检查其中的所有元素。如果某个元素出现不止一次,我会发出错误信号。我是这样做的:std::vectortest;test.push_back("YES");test.push_back("YES");for(inti=0;i1){DCS_LOG_DEBUG("ERRORWITHCOUNT")}}尽管我知道如何使用std::vector::count()方法进行计数,但这并没有奏效。但我想计算每个元素的数量,而不是计算所有元素……有什么想法吗? 最佳答案 最简单的方法是对vector​​进行std::

c++ - C++ 中 std::vector 的基本问题

C++教科书和线程,例如these说vector元素在内存中是物理上连续的。但是当我们执行像v.push_back(3.14)这样的操作时,我会假设STL正在使用new运算符来获取更多内存来存储新元素3.14引入到载体中。现在假设大小为4的vector存储在标记为0x7,0x8,0x9,0xA的计算机存储单元中。如果单元格0xB包含一些其他不相关的数据,3.14将如何进入该单元格?这是否意味着单元格0xB将被复制到其他地方,并被删除以为3.14腾出空间? 最佳答案 简短的回答是将保存vector数据的整个数组移动到它有空间增长的位置

C++ 指向 vector 的指针

我必须将元素插入到指向vector的指针中。我已经编写了以下代码,但它给出了段错误。有人可以指出此代码中的错误是什么,或者我们如何替代地执行此操作。intmain(){vector*te;te->push_back(10);coutsize() 最佳答案 你永远不会分配vector:vector*te=newvector;此外,您不需要动态分配。更简洁的方法是使用自动存储:intmain(){vectorte;te.push_back(10);cout 关于C++指向vector的指针,