草庐IT

c++ - 尝试访问 std::stack 的索引

voidPDA::parse(vectorwords){for(inti=0;i我遇到了这些错误PDA.cpp:25:error:nomatchforâoperator[]âinâ((PDA*)this)->PDA::stack[j]âPDA.cpp:26:error:nomatchforâoperator[]âinâ((PDA*)this)->PDA::stack[(j-1)]â对于这些行if(!stack[j]){//sincej-1whentheindexis0willcauseanerrorif(stack[j-1]==matchingBracket){我查找了std::sta

c++ - 如果键已经存在,为什么 STL 映射会插入另一个值,而不仅仅是更改它?

为什么我使用STL映射的程序在键已经存在时插入值而不是更改现有值?#include#includeusingnamespacestd;structCTest{inta,b,c;CTest(intA,intB,intC):a(A),b(B),c(C){}};booloperatorr.a)returnfalse;if(l.br.b)returnfalse;if(l.cr.c)returnfalse;returntrue;}structCTest2{booloperator>x;x[CTest(1,1,1)]["lol"]=CTest2(1,2);//x[CTest(1,1,1)]["lo

c++ - (重新)将 vector 初始化为具有初始值的特定长度

作为函数参数,我得到一个vector&vec(一个输出vector,因此是非常量)具有未知的长度和值。我想将此vector初始化为全为零的特定长度n。这会起作用vec.clear();vec.resize(n,0.0);这也行得通:vec.resize(n);vec.assign(n,0.0);第二种效率更高吗(因为不涉及内存释放/分配)?有没有更有效的方法来做到这一点? 最佳答案 std::vector(n).swap(vec);在此之后,保证vec的大小和容量为n,所有值为0.0。也许自C++11以来更惯用的方式是vec.ass

c++ - 使用 C++ STL 中定义的堆栈

#includeusingnamespacestd;intmain(){stacks;inti;for(i=0;i上面的代码有什么问题吗?错误:Infunctionintmain():aggregatevalueusedwhereanintegerwasexpected 最佳答案 stack::pop是一个void函数,它只是丢弃堆栈中的顶部元素,以获取您想要使用的值stack::top.之所以如此是因为exceptionsafetyreasons(如果返回的对象在其复制构造函数中抛出异常会怎样?)。

c++ - 为了性能,我应该更喜欢数组而不是 vector 吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:std::vectorissomuchslowerthanplainarrays?看起来vector是分配在堆上而不是堆栈上。那么,当性能成为一个严重问题时,我是否应该考虑使用数组来代替vector(如果可能)?

c++ - 在对对象的 vector 进行排序时使用 stable_sort

我有classPassanger有变量stringname;stringstation;stringticket;然后我有另一个类,在这个类中我有vectormyQueue;现在我想使用stable_sort排序myQueue.有没有可能,怎么说给stable_sort,应该是什么key,根据它排序myQueue?std::stable_sort(myQueue.begin(),myQueue.end(),maybeSomethingElse());? 最佳答案 std::stable_sort()过载接受自定义比较器作为其第三个参

c++ - 更改 C++ vector 的保留内存

我有一个包含1000个“节点”的vectorif(count+1>m_listItems.capacity())m_listItems.reserve(count+100);问题是当我要重新填充它时,我也把它清除了。m_listItems.clear();容量不变。我用过resize(1);但这似乎并没有改变容量。那么如何改变储备呢? 最佳答案 vector(m_listItems).swap(m_listItems);将再次收缩m_listItems:http://www.gotw.ca/gotw/054.htm(赫伯萨特)如果你

c++ - 迭代器是否支持+运算符?

我看到以下代码用于从std::vector中删除一个选定的元素:vector::iteratorit;intiIndex=0;constintiSelected=5;for(it=vecPoints.begin();it!=vecPoints.end();++it,++iIndex){if(iIndex==iSelected){vecPoints.erase(it);break;}}我认为这段代码效率不高,应该这样写:vector::iteratorit;intiIndex=0;constintiSelected=5;//weassumethevectorhasmorethan5ele

c++ - 如何检查值是否在列表中

我有列表llikelist>.如何检查xpairx=make_pair(5,6)在列表l中? 最佳答案 使用std::find:std::find(l.begin(),l.end(),x)!=l.end() 关于c++-如何检查值是否在列表中,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/11429308/

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::