草庐IT

EidosValue_Int_vector

全部标签

C++:从复制构造函数外部修改对象成员时 vector 内存损坏,但从内部修改时则不会

#include#include#includeclassa_class{public:intnum_IN;a_class():num_IN(0){}a_class(a_classconst&origin){/*Initialise();*/}//ifnotcalledhere,erroroccursvoidInitialise(){num_IN=5;}};intmain(){std::vectorthe_vector;for(intq=0;q我不明白从CC外部和内部调用它之间的区别。我也不知道为什么它无论如何都会引起问题。 最佳答案

c++ - 我怎么知道我的迭代器是否递减超过了我的 vector 的开头?

我正在通过一个vector来回移动一个iterator。我可以像这样检查迭代器是否结束:++my_iterator;if(my_iterator==my_vector.end()){--my_iterator;//ifIwanttostoptheiteratorattheend.my_iterator=my_vector.begin();//ifIwanttheiteratortowraparound.}但是我如何检查它是否从一开始就跑完了呢?编辑:那我可以这样做吗?--my_iterator;if(my_iterator==my_vector.rend()){my_iterator=

c++ - MSVCC/g++/icc 中 std deque/vector 之间的不同行为

我有一段非常简单的代码;#include#includeusingnamespacestd;classA{public:A(){};~A(){};dequemy_array;//vectormy_array;};intmain(void){}如果我在Linux上同时使用g++和icc/icpc编译这段代码,它编译得很好,即使使用-Wall也不会给出任何警告。如果我将双端队列交换为vector,情况是一样的。我想在Windows上使用MSVCC(cl)构建此代码,但不幸的是它会抛出错误c2027:errorC2027:useofundefinedtype'A'但是,如果我将std::de

c++ - 在不重新洗牌的情况下随机选择 std::vector 的所有元素一次的有效方法

我正在寻找一种有效的方法来选择对std::vector的每个元素的访问权以随机顺序,不重新洗牌或复制它们,即不使用std::random_shuffle并确保每个元素只被选择一次。我不想复制或重组a)T的每个实例可能是一个非常大的对象,并且b)对于我将对vector的元素执行的其他操作,它们更容易保持相同的顺序。此外,我真的不想走上不断挑选和拒绝重复的道路。很可能我会在vector中存储很多这样的大对象,效率是关键,因为我希望每秒多次调用这种随机选择方法。 最佳答案 创建一个与现有vector大小相同的vector,该vector使

c++ - C++中的哈希函数,用于将字符串转换为int

我正在寻找C++中的散列函数以将字符串散列为int。我使用了CMapStringToPtr,但它有一个名为“GetNextAssoc”的函数,允许以字符串形式检索key,这意味着必须存储该字符串并且它会占用大量内存。是否有任何其他哈希函数获得更少的内存并且不存储字符串? 最佳答案 C++有一个用于此目的的内置哈希函数-它用于所有STL哈希容器。std::hashPS:你也可以自己制作,只需通过const引用传递字符串,然后一个一个地循环遍历它的字符,将它们添加到一个整数,然后用某个值进行mod:)

c++ - 将对象显式类型转换为 int *

以下C++代码的输出是什么?#includeusingnamespacestd;classIndiaBix{intx,y;public:IndiaBix(intxx){x=++xx;}~IndiaBix(){cout我没看懂下面这行::int*p=(int*)&objBix;//Explicittypecastofaclassobjecttointegerpointertype 最佳答案 可以将(标准布局类型的)对象指针转换为指向其第一个成员的指针。这是因为可以保证标准布局对象的第一个成员与整个对象具有相同的地址:c++119.2C

c++ - 使用 std::accumulate 计算部分 vector 的总和

有这个vectorvectorv{1,2,3,4,5,6,7,8,9,10};如何使用accumulate计算它的前半部分的总和(即15)功能?我可以使用仅带有迭代器(而不是数字索引)的for循环来做到这一点吗? 最佳答案 你可以accumulate(v.begin(),v.begin()+int(v.size()/2),0)如果v是您的vector。你也可以写一个循环:intsum=0;for(vector::iteratorit=v.begin();it!=v.begin+int(v.size()/2);++it){sum+=*

c++ - 如何将 "point of declaration"解释为 "const int i=2; { int i[i]; }"- C++ 标准中的示例?

我正在研究C++标准以了解操作顺序、表达式、语句和副作用。一个相关的问题是名称的“声明点”。在C++11标准的§3.3.2.1节中,该标准规定:Thepointofdeclarationforanameisimmediatelyafteritscompletedeclarator(Clause8)andbeforeitsinitializer(ifany)...以下段落添加了带有示例的注释:Note:anamefromanouterscoperemainsvisibleuptothepointofdeclarationofthenamethathidesit.……举个例子constin

c++ - 替换 vector 中的子 vector

我有vectormy_vector;vectorother_vector;与my_vector.size()==20和other_vector.size()==5.给定intn,与0,我想用my_vector[n]替换子vector(myvector[n+1],myvector[n+4],...,other_vector).肯定是愚蠢的代码for(inti=0;i我已经完成了,但我想知道是否有更有效的方法来做到这一点。有什么建议吗?(当然数字20和5只是一个例子,在我的例子中我有更大的尺寸!) 最佳答案 在C++11中,一个友好的函

c++ - 我可以在 vector 的一个实例上使用 value_type,而不是它的类型吗

在播放和尝试计算vector的总大小时,我尝试了类似的方法vectorvd;autoarea=vd.size()*sizeof(vd::value_type);//IveseenStepanovuseareaasnameforthiskindofsize,idkifheaddsthesizeofvdalsotoarea:)不幸的是,这不起作用......我需要使用vector::value_type但这会降低代码的可读性。它可以工作吗?我不喜欢sizeofvd.front()因为写front()看起来很难看为此。编辑:decltype变体也适合我所说的丑陋类别......