草庐IT

vector-clock

全部标签

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的指针,

c++ - std::vector<A> error C2582: 'operator =' 函数在

我使用简单的vectorpush_back到类型A的对象并收到此错误,这是我的代码:classA{public:A(inta,intb,intc);};#include"A.h"................std::vector*vec_objects=newstd::vector();while(....somecondition...){Aa(1,2,3)vec_objects->push_back(a);}出现这个错误:c:\programfiles\microsoftvisualstudio9.0\vc\include\xutility(3159):errorC2582:'

c++ - 为什么删除指向指针 vector 的指针会导致指针无效?

编辑:感谢您的回答!我用std::string返回类型声明了tellSomething方法,而它应该是void!我把自己绊倒了,责怪可怜的无辜的delete运算符(operator):)!让我们考虑一个指向动态分配的vector的指针,它包含指向动态分配的对象的指针://Createthevectorofpointersstd::vector*v=newstd::vector;//CreatetwoobjectsA*a1=newA;A*a2=newA;//Populatethevectorv->push_back(a1);v->push_back(a2);//Deletethevect

c++ - vector 、迭代器和 std::find

有没有办法在不同的vector中使用不同类型的迭代器?或者,是否有一个函数将vector中元素的位置作为整数返回?std::vector::iteratorit;//Iterator//monsterQueueisavectorit=std::find(bot.monsterQueue.begin(),bot.monsterQueue.end(),object);//Checkdowehavetheobjectinthequeueif(it!=bot.monsterQueue.end())//Ifwedohaveit{bot.monsterDists.at(it)=mobDist;//

c++ - 我可以在 STL 的 map 中使用 vector 吗?

我可以声明这样的map吗map>mymap;我认为它是适用的。然而,它显示不是。我试过了map*>mymap;然后就OK了这是什么规则? 最佳答案 你需要一个额外的空间:map>mymap;^seetheextraspace没有额外的空间,>>被解析为右移运算符。在C++0x中修改了规则,不再需要额外的空间。一些编译器(例如VisualC++2008及更高版本)已经不需要额外的空间。 关于c++-我可以在STL的map中使用vector吗?,我们在StackOverflow上找到一个类似

c++ - 为什么 std::vector max_size() 函数会返回 -1?

我有一个std::vectorm_vData;m_vData.max_size()总是返回-1。为什么会这样? 最佳答案 可能是因为您在查看之前将其分配给签名类型。max_size的返回值通常是size_t,这是一个无符号类型。在许多平台上直接转换为int将返回-1。试试下面的方法std::vector::size_typev1=myVector.max_size(); 关于c++-为什么std::vectormax_size()函数会返回-1?,我们在StackOverflow上找到一

c++ - 从具有 O(1) 运行时间的 vector 中删除元素

"写一个函数,输入一个vector类型的对象在常数时间O(1)[常数]中删除第k个元素。假设元素的顺序无关紧要。”我想我可能对此有所了解。但是,当我开始尝试使用.erase()时,我查看了大O符号是什么,发现它是O(n),就像线性关系一样。我暂时想不出任何其他方式。我不想要任何代码,但我认为如果有人可以提供帮助,伪代码至少会为我指明正确的方向 最佳答案 Assumethattheorderofelementsdoesnotmatter.这是你需要注意的。假设你有一个vector0123456你想删除3。你可以把它变成012645在O