草庐IT

vector-like

全部标签

c++ - 是否允许 std::vector::size() 要求非平凡的计算?什么时候有意义?

我正在审查一段代码,看到一个类,其中std::vector存储为成员变量,并且该std::vector的大小存储为单独的成员变量。std::vector及其大小的“存储拷贝”在包含对象的生命周期内永远不会改变,评论说大小是单独存储的“为了方便和情况实现每次都会计算大小”。我的第一react是“WT*?提取std::vector的大小不应该总是微不足道的吗?”现在我仔细阅读了C++标准的23.2.4,看不到任何说明是否首先允许此类实现的内容,我无法想象为什么有必要实现std::vector以其当前大小需要非平凡计算的方式。这样的实现是否允许std::vector::size()需要一些重

c++ - 如何避免在 C++ 中将 const_cast 与 std::vector::erase() 一起使用?

我有这样一个类:templateclassAdjacencyList{public:voiddelete_node(constT&);protected:consttypenamestd::vector::const_iterator_iterator_for_node(conststd::vector&,constT&);};templatevoidAdjacencyList::delete_node(constT&node){_nodes.erase(_iterator_for_node(_nodes,node));}templateconsttypenamestd::vector

C++:将自动分配的对象添加到 std::vector

我写了下面的代码:#include#includeusingnamespacestd;classAClass{public:intdata;AClass(){data=-333;coutv;for(inti=3;i--;)v.push_back(AClass(i));vector::iteratorit=v.begin();while(it!=v.end())coutdata程序的输出是:+Creating2+Creatingcopyof2-Deleting2+Creating1+Creatingcopyof1+Creatingcopyof2-Deleting2-Deleting1+C

c++ - 防止 std::vector 在 push_back 上调整大小

我有一个std::vector,我知道它永远不必增长——它总是有n元素(不幸的是,n在编译时是未知的时间所以我不能使用std::array)。我能做到:std::vectorv(n);正确地将其容量设置为n。但是当我继续用push_back填充v时,它会自动调整大小为2n。我意识到这是过早的优化,但它困扰着我。有没有办法设置最大大小之类的? 最佳答案 该构造函数没有将vector的容量设置为n,而是创建一个包含n的vector用blah构造的对象的默认构造函数。这可能会让具有Java或.NET背景的人感到困惑,其中ArrayList

c++ - 为什么 std::vector 将其常量传递给包含的对象?

Aconstint*和一个int*const非常不同。与conststd::auto_ptr类似与std::auto_ptr.但是,conststd::vector似乎没有这种区别。与std::vector(实际上我不确定是否允许第二个)。这是为什么?有时我有一个函数,我想将一个引用传递给一个vector。该函数不应该修改vector本身(例如没有push_back()),但它想要修改每个包含的值(比如,增加它们)。同样,我可能希望一个函数只更改vector结构而不修改其任何现有内容(尽管这很奇怪)。std::auto_ptr可以实现这种事情(例如),但因为std::vector::f

c++ - objective-c 方法中的 std::vector

我正在使用Objective-C++。我遇到的问题是我需要将std::vector传递给objective-c方法。这可能吗?下面是我当前的代码,在作为C数组传递给方法之前,我必须在vector定义方法中对vector进行计算(向数组成员添加偏移值)。理想情况下,我想在第二种方法中设置偏移值,从而拆分定义(其中会有几个)与下面的示例不同,偏移量是可变的。所以我不想传入(b2Vec2*)vect,而是使用vector-(void)createterrain1{usingnamespacestd;vectorvecVerts;vector::size_typei;vecVerts.push

c++ - 收缩 std::vector 's size to fit its actual data to save memory usage? vec.swap() doesn' t 在 MSVC 中工作吗?

实际上我的程序中有数百万个vector对象。默认情况下,对于每个vector,系统将分配比实际需要更多的空间,因为这些vector在完成加载后是只读的。所以我想缩小自己的容量来节省内存。一种典型的方法是使用vector.swap()方法,如thisquestion中所述:std::vectortmp(v);//copyelementsintoatemporaryvectorv.swap(tmp);//swapinternalvectordata我试过这段代码,但发现.swap()操作实际上并没有减少内存成本。(我查看了任务管理器中的PrivateWorkingSetsize来获取进程的

c++ - 如何将项目放入 const vector 中?

我一直在尝试多种不同的方法,但我无法弄清楚。我得到的声明是:conststd::vector&,我一直在尝试这样做:gradeReported.push_back(firstEntry);我一直收到错误。我很确定它与vector的常量性质有关。帮助将不胜感激! 最佳答案 你不知道。如果是const,则不能修改。您需要复制或通过非常量引用获取它。 关于c++-如何将项目放入constvector中?,我们在StackOverflow上找到一个类似的问题: htt

c++ - 从 vector 返回 bool&

这个问题在这里已经有了答案:Whyvector::referencedoesn'treturnreferencetobool?(6个答案)关闭9年前。在下面的代码中:classSomeClass{vectori;vectorb;public:int&geti(){returni[0];}bool&getb(){returnb[0];}};如果您注释掉getb(),代码可以正常编译。显然,返回对存储在vector中的int的引用没有问题,但您不能使用bool来实现。这是为什么?

c++ - 如何检查 C++ STL vector 中存在的值并将函数应用于 vector 的每个元素?

我有两个问题与C++标准库的vector类有关。如何检查vector中是否已经存在一个值(假设是一个整数)?我想要的文字如下:“如果整数已经存在于vector中,则下一个,否则将其添加到vector的末尾。”如何应用一个包含参数的函数到vector中的每个元素?(看来我不能用for_each做到这一点)换句话说:“对vector中的每个z元素应用MyAddFn(i,j)”...或者也许我没有在STLvector序列容器的正确轨道上,我应该定义我自己的迭代器? 最佳答案 1)std::find(v.begin(),v.end(),5)