草庐IT

vector_c

全部标签

c++ - 分配给 std::vector<T>::begin() 的结果是什么?

我对左值和右值略有了解。所以据我所知,我们不能分配给右值,但非常量左值是可以的。#include#includeintmain(){std::vectorv{1,2,3,4,5};v.begin()=v.end()-2;std::cout为什么我可以赋值给begin()但它对元素什么都不做? 最佳答案 v.begin()是一个迭代器。分配给迭代器不会分配给迭代器指向的值。另外,因为v.begin()是纯右值,您分配给的对象在行尾被销毁,而不影响v或其拥有的任何“永久”内存。如果v.begin()是原始指针,编译器会发出错误以尝试分配

c++ - 适当的 vector 内存管理

我正在制作一款游戏,我有一个子弹飞来飞去的vector。子弹完成后,我执行bullets.erase(bullets.begin()+i);然后子弹消失了。然而,它似乎并没有获得内存棒。如果我创建5000颗子弹,然后在这些子弹消失后再创建5,000颗,内存保持不变,但如果我在这5000颗子弹飞行时再创建5,000颗,它将分配新的空间。我需要做什么才能真正释放这些内存? 最佳答案 std::vector类自动管理其内部存储器。它会扩展以容纳您放入其中的所有项目,但通常它不会在您移除项目时自行收缩(尽管它当然会在破坏时释放内存)。std

c++ - 调整多维 vector 的大小

如何调整多维vector的大小,例如:vector>>array;比如我需要数组[3][5][10]? 最佳答案 array.resize(3,vector>(5,vector(10))); 关于c++-调整多维vector的大小,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4311953/

c++ - 如何从 vector 中删除第一次出现的值?

我试图从vector中获取单个元素并将其推到vector的后面,然后将其删除,这样内存中就不会出现空白部分。erase-remove习语可以做到这一点,但它会删除特定值的所有实例。我只想删除第一个。我对标准库算法不太熟悉,也找不到合适的方法(如果有的话)来执行此操作。这是一个例子:intmain(){std::vectorv{1,2,3,3,4};remove_first(v,3);std::cout那么我该如何从这个vector中移除第一次出现的3呢? 最佳答案 先找到,再删除:autoit=std::find(v.begin()

C++:减去 vector

我有两个vector。我需要从vector1中删除vector2中的内容。[编辑:不清楚这是否意味着按照下面的链接或设置差异进行逐元素减法]我使用VisualStudio2010。好像有一个方法:http://msdn.microsoft.com/en-us/library/system.windows.vector.subtract.aspx但它不知何故不起作用,甚至没有代码示例。你能帮帮我吗?如果不存在标准方法,也许您可​​以建议如何通过循环组织它?提前谢谢你。#include"stdafx.h";#include;#includeusingnamespacestd;intmain

c++ - push_back 如何在 STL vector 中实现?

我在一次采访中被问到这个问题。我回答的点是这样的1)指向当前位置的索引;2)必要时调整大小。谁能详细说明一下? 最佳答案 STLvector有一个size(当前存储元素的数量)和capacity(当前分配的存储空间)。如果size,一个push_back简单地将新元素放在末尾并递增size1.如果size==capacity在push_back之前,分配了一个新的更大的数组(两倍大小是常见的,但这是依赖于实现的afaik),所有当前数据都被复制(包括新元素),并释放旧分配的空间。如果分配失败,这可能会引发异常。操作的复杂性是摊销O(

c++ - 对 vector 的 vector 进行排序

我有vector>vec在我的C++应用中。每个作为“大”vector元素的整数vector都有4个INT值。我想根据它的整数内容vector的第三个值对vec进行排序(我的意思是每个“内部”vector第三个元素)——这可能吗?编辑假设我有一个函数COST(vector)它根据我的vector值计算出一些值——我也可以在比较参数中使用它吗?它会帮助我更多。 最佳答案 当然可以。std::sort可以采用第三个参数,这是排序时要使用的比较函数。例如,您可以使用lambda函数:std::vector>vec;//Fillitstd:

c++ - 使用 STL 将大型 STL vector 写入文件的最快方法

我有一个很大的字符vector(10^9个元素),我想知道将这种vector写入文件的最快方法是什么。到目前为止,我一直在使用下一个代码:vectorvs;//...Fillvectorwithdataofstreamoutfile("nanocube.txt",ios::out|ios::binary);ostream_iteratoroi(outfile,'\0');copy(vs.begin(),vs.end(),oi);对于此代码,将所有数据写入文件大约需要两分钟。实际问题是:“我能否使用STL使其更快以及如何”? 最佳答案

c++ - 如何获取 C++ 类成员 vector 的大小?

我有一个类,它有一个类型为std::vector的成员。在某些地方,我需要另一个类中该vector的大小。因为成员是私有(private)的,所以我创建了一个getter来返回它。在查看代码时,我想到了一个问题:是调用getter然后调用size()还是创建一个“sizegetter”更好?这是我的类(class):classMyClass{private:std::vectorm_myVec;public:std::vectorgetMyVec()const{returnm_myVec;}//ShallIcreate://std::size_tgetMyVecSize()const{

c++ 将 vector<Inherited*> 转换为 vector<abstract*>

classInterface{};classFoo:publicInterface{};classBar{public:vectorgetStuff();private:vectorstuff;};如何实现getStuff()函数? 最佳答案 vectorresult(stuff.begin(),stuff.end());returnresult; 关于c++将vector转换为vector,我们在StackOverflow上找到一个类似的问题: https: