草庐IT

c++ - 我应该使用哪个 STL 容器? C++

我有一个对象“列表”,我想从中随机获取对象并将其推到该列表的前面。只有这种操作才会被执行。所以我不需要快速访问列表的末尾,只需要它的前面和平均访问任何其他地方。哪个容器最适合这个?我在考虑std::vector,但我读到insert操作效率不高。然后我想出了std::deque因为它访问front的速度很快,但是它的eraseatspecificposition方法的效率如何呢?在此先感谢您的帮助。 最佳答案 我们可以为您提供指导,但没有明确的答案——您需要自己进行基准测试,因为这在很大程度上取决于您的收藏和对象大小:对于小对象和/

c++ - 使用 std::vector.erase(begin(), end()) 或 std::vector.erase(begin(), begin()) 安全吗?

我想处理vector中的元素一段时间。为了优化这一点,我不想在处理项目时删除它,而是在最后删除所有已处理的项目。vector::iteratorit;for(it=items.begin();it!=items.end();++it){DoSomething(*it);if(TimeIsUp()){break;}}items.erase(items.begin(),it);当it==items.end()时使用erase是否安全?在文档中说erase()将删除[first,last)并且这应该是安全的,但我想确定。编辑:使用std::vector.erase(begin(),begin

c++ - Visual Studio 监 window 口如何知道展开 `std::vector<T>` 并显示元素?

如果你展开std::vector在监window口中,您将获得诸如“[0]”、“[1]”等项,集合中的每个值对应一项。在实现我自己的集合类时(顺便说一下,它包装了一个动态数组),我想要同样的功能。VisualStudio如何知道要在std::vector的监window口中显示多少元素?? 最佳答案 有一个名为autoexp.dat的文件,调试器使用它来解释自定义类型。它并不正式意味着要进行编辑,但我们已经在内部将其用于集合类型并且它工作正常。有一些粗糙的边缘。http://msdn.microsoft.com/en-us/libr

c++ - 在 C++ 中创建可变数量的 vector

我可以创建一个大小为n*m的二维数组通过做:vector>foo(n,vector(m)).假设在运行时我得到了可变数量的值,例如v_1,v_2,v_3,...,v_k并希望创建以下内容:vector...>>foo(v_1,vector(v_2,vector..));换句话说,创建一个大小为v_1*v_2*v_3...*v_k的多维数组.我怎样才能做到这一点?这可能吗? 最佳答案 你不能这样做——数据类型必须在编译时设置。也就是说,使用具有正确元素总数的单个数组并创建一个映射以便您的逻辑[i1][i2][...]是非常实用的。在说

c++ - 加密初始化 vector

使用aes_cfb_encrypt和aes_cfb_decrypt函数,我有以下问题。加密中的无符号字符*iv(初始化vector)是什么。是否需要保留*iv以便解密。每次我加密一块数据时,*iv都会被修改,与此修改后的*iv的关系。我正在加密一个大约100mb的大文件,并第一次随机传递*iv,我是否必须在循环的其余部分中使用相同的*iv,否则我必须使用更新的*iv加密块的最后一次调用中的。最后,我正在处理结构化文件,因此我必须使用Sizeof(struct)作为缓冲区的长度还是必须使用sizeof(struct)*8作为缓冲区的长度用于加密或解密。请指导..AES_RETURNaes

c++ - 将结构 vector 传递给函数

我正在努力弄清楚如何以简单而优雅的方式将Struct的Vector传递给函数。代码如下所示:structcube{doublewidth;doublelength;doubleheight;};vectormyVec;intmyFunc(vector&in){//dosomethinghere}inttest=myFunc(myVec.width);//NOTPOSSIBLE所以我想要的是只将宽度vector传递给函数并执行一些计算。这是完全可能的还是我必须将完整的vectorfo结构传递给函数myFunc()? 最佳答案 如果你想

指针的 C++ 运算符重载

我想知道(出于好奇)为什么C++中的指针不允许运算符重载。我的意思是这样的:Vector2d*operator+(Vector2d*a,Vector2d*b){returnnewVector2d(a.x+b.x,a.y+b.y);}Vector2d*a=newVector2d(1,1);Vector2d*b=newVector2d(2,2);Vector2d*c=a+b;请注意“a+b”如何创建一个新的Vector对象,然后仅将其地址复制到“c”中,而不调用复制构造函数。所以它会解决新右值引用解决的相同问题。此外,据我所知,它几乎等同于在C#中使用运算符重载时发生的情况(但我在这里可能

c++ - 如何在同一结构中声明结构的 vector ?

我正在尝试创建一个结构,其中包含一个类型为同一结构的vector。但是,当我构建时,错误表明我缺少“;”在“>”出现之前。我不确定编译器是否甚至将vector识别为一个东西:/并且我已经包含在我的代码中。这是我目前所拥有的:#includetypedefstructtnode{intdata;vectorchildren;GLfloatx;//xcoordinateofnodeGLfloaty;//ycoordinateofnode}tnode;任何帮助将不胜感激!! 最佳答案 您的代码正在调用未定义的行为,因为vector等标准容

C++ unique_ptr 不调用析构函数

我有一个vector的unique_ptr指向一个叫做state的类。当我用vector调用pop_back()时,唯一指针从内存中删除(我认为),但它指向的状态对象永远不会被删除。那个或唯一指针在删除它指向的对象时不会以某种方式调用析构函数?我所知道的是,当我的唯一指针从vector中移除时,我的析构函数不会被调用。这是vector:std::vector>mStates;我试过:mStates.pop_back();这会删除唯一指针,我认为唯一指针会为我删除状态并调用状态的析构函数,但那没有发生。顺便说一句,我通过使用添加元素:mStates.push_back();

C++从函数调用的多个返回构建字符串 vector 的最佳方法

我正在练习C++,所以这不是将要投入生产的代码,但我非常想知道:我有一个指向Player类型对象的指针vector:std::vector_players;当我调用它的方法get_name()时,每个玩家都将他的名字作为std::string返回给我,例如:std::stringplayer0_name=_players[0]->get_name();我想将所有玩家名称传递给一个函数,该函数期望将它们作为对字符串vector的引用:voidall_player_names(std::vector&);现在我知道通过一些临时变量可以很容易地做到这一点。我可以先创建一个字符串vector,