草庐IT

n_vector

全部标签

c++ - 在 C++ 中使用 std::vector 的性能损失是什么?

通常,我很想知道标准模板库是否会在用于数值/科学计算的代码中产生性能/速度开销。例如。将数组声明为double2dmatrix[10][10]会比给我更多的表现std::vector>2dmatrix(10,std::vector(10,0.0))?对于C语言在科学计算方面是否比C++具有更好的性能,我也很欣赏一些一般性的想法。我使用STL并大量使用C++11以非常面向对象的风格编写了我的代码。我开始考虑是否应该开始研究纯C,如果它运行得更快。欢迎就此提出任何想法。 最佳答案 考虑到它提供的抽象,C++std::vector是最高效

C++ 将一个 vector append 到另一个 vector

我完全理解这个问题被很多问了,但我要求的是一个特定的变体,我的search-foo已经放弃了,因为我只找到了append一个现有的算法vector到另一个,但不是从函数返回的vector。我有一个列出目录中所有文件的函数:vectorscanDir(conststring&dir)它可以在内部调用自己(对于子目录)。我需要一种简短的方法来将返回值append到调用者的vector中。我有这样的想法(但当然它不存在:():vectorfileList;//...fileList.append(scanDir(subdirname));我担心存储返回值并将其插入fileList会带来性能问

c++ - 在 C++ 中显示 vector 容器的内容

下面是一个使用STLvector容器的C++程序。只是想知道为什么display()函数没有将vector内容打印到屏幕上。如果显示size()行被注释掉,则display()函数可以正常工作。#include#includeusingnamespacestd;voiddisplay(vector&v){for(inti;iv;cout>x;v.push_back(x);}//Sizeafteraddingvaluescout输出:SizeofVector=0Enterfiveintegervalues12345SizeofVector=5SizeofVector=6

c++ - std::vector 是否更改其地址?如何避免

由于vector元素是连续存储的,我猜它在一些push_back之后可能没有相同的地址,因为初始分配的空间不够用。我正在编写一段代码,我需要在其中引用vector中的元素,例如:intmain(){vectorv;v.push_back(1);int*ptr=&v[0];for(inti=2;i但是ptr不一定包含对v[0]的引用,对吗?怎样保证比较好?我的第一个想法是使用指针vector和动态分配。我想知道是否有更简单的方法来做到这一点?PS.:实际上我使用的是一个类的vector而不是int,但我认为问题是一样的。 最佳答案 不

c++ - 在 Xcode : error during compilation: STL vector 中编译 C++ 类

我有一个C++类,它可以在带有gcc的Linux上和在visualstudio中的widows上正常编译。boid.h:#ifndefBOID_CLASS_HEADER_DEFINES_H#defineBOID_CLASS_HEADER_DEFINES_H#include"defines.h"classBoid{public://Initializetheboidwithrandomposition,headingdirectionandcolorBoid(floatSceneRadius,floatNormalVel);.....protected:...};#endif在boid.

c++ - 从 std::vector 的开头移除

关闭。这个问题需要debuggingdetails.它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。关闭6年前。Improvethisquestion我有一个具有以下数据结构的vectorstructRule{intm_id=-1;std::wstringname;doubleangle;};std::vector&topPriorityRules;我正在使用删除vector的第一个元素topPrio

c++ - std::vector 的一个小问题,并在遍历它时更改集合

这个循环在运行时改变迭代器:std::vectorc;c.push_back(1);c.push_back(2);std::vector::iteratoriter=c.begin();std::vector::iteratorendIter=c.end();while(iter!=endIter){std::cout它不起作用,因为:Iteratorsandreferencestotheerasedelementsandtotheelementsbetweenthemandtheendofthecontainerareinvalidated.Past-the-enditeratori

c++ - 将 vector 元素移动到 vector 的后面

有没有比删除元素并将其重新添加到后面更好的方法(更快或使用更少的代码符号)?templatevoidmoveItemToBack(std::vector&v,size_titemIndex){Ttmp(v[itemIndex]);v.erase(v.begin()+itemIndex);v.push_back(tmp);} 最佳答案 您可以使用std::rotate执行此操作来自标准库。由于这不会改变vector大小,因此也不会触发重新分配。你的函数看起来像这样:templatevoidmoveItemToBack(std::vec

c++ - 将一行 cv::Mat 转换为 std::vector

我有一个相当简单的问题:如何获取一行cv::Mat并获取std::vector中的所有数据?cv::Mat包含doubles(就问题而言,它可以是任何简单的数据类型)。浏览OpenCV文档非常困惑,除非我将页面添加为书签我无法通过谷歌搜索两次找到文档页面,其中的内容太多而且不容易导航。我找到了访问Matrix元素的cv::Mat::at(..),但我记得COpenCV至少有3个访问元素的不同方式,所有这些都用于不同的目的......不记得用于什么:/因此,虽然逐个元素地复制Matrix肯定会奏效,但我正在寻找一种更高效并且如果可能的话更优雅而不是每一行的for循环。

c++ - 将短列表合并为长 vector 的算法

我有一个稀疏矩阵类,其非零值和相应的列索引按行顺序存储在基本上类似于STLvector的容器中。它们可能有未使用的容量,比如vector;要插入/删除元素,必须移动现有元素。假设我有一个操作,insert_erase_replace,或者简称为ier。ier可以执行以下操作,给定位置p、列索引j和值v:如果v==0,ier删除p处的条目并左移所有后续条目。如果v!=0,并且j已经存在于p中,ier替换单元格内容在p和v。如果v!=0,并且j不在p中,ier插入条目v和p处的列索引j右移所有后续条目后。所以所有这些都是微不足道的。现在假设我有ier2,它做同样的事情,除了它需要一个包含多