草庐IT

back-end

全部标签

c++ - push_back 与 emplace_back 到 std::vector<std::string>

类似的问题存在于here和here但我认为我们还没有得到明确的答案然后我重新提出问题。C++11标准有两种在vector末尾添加新元素的方法,它们是std::vector::push_back和std::vector::emplace_back.它们之间的区别在于std::vector::emplace_back就地构造对象而std::vector::push_back基本上复制对象(或原语类型)或将其移动到vector的末尾。然后std::vector::push_back看起来是将原始类型添​​加到std::vector中的更好选择。例如:std::vectorvVec;vVec.

c++ - 在 C++ 中, vector 函数 push_back 会增加空数组的大小吗?

快速提问。假设我声明了一个大小为20的vector。然后我想使用push_back向它添加一些整数。vectormyVector(20);myVector.push_back(5);myVector.push_back(14);我的vector的容量现在是22,还是还是20?索引[19]和[20]分别添加了5和14吗?还是它们在[0]和[1]? 最佳答案 在这些语句之后,它的容量是实现定义的。(请注意,这与其大小不同。)vectormyVector(20);这将创建一个由20个0填充的vector。它的大小是二十,准确地说,它的容量

C++ 是否在恒定时间内执行 std::set、std::map 等的 begin/end/rbegin/rend?

对于std::set和std::map等以对数时间查找的数据类型,实现是否需要维护开始和结束迭代器?访问begin和end是否意味着查找可能以对数时间发生?我一直假设开始和结束总是在常数时间内发生,但是我在Josuttis中找不到任何对此的证实。既然我正在做一些我需要对性能有所了解的事情,我想确保涵盖我的基础。谢谢 最佳答案 它们发生在常数时间内。我正在查看ISO/IEC14882:2003标准的第466页:表65-容器要求a.开始();(恒定的复杂性)a.end();(恒定的复杂性)表66-可逆容器要求a.rbegin();(恒定

c++ - vector.back() 和 vector.end() 有什么区别?

我是一名新的C++学习者,我阅读了一个关于C++STL访问vector中最后一个元素的代码块。为什么第6、7、8行的代码需要减去1才能等于第5行的代码?1.std::vectorv;2.v.push_back(999);3.//fillupthevector4.//...5.intj=v.back();6.intj=v.[size-1]7.intj=v.at(v.size()-1)8.intj=*(v.end()-1) 最佳答案 下面是哪个是哪个的说明v:[1|2|3|4|...|999]???front()back()end()?

c++ - pop_back() 是否真的使 std::vector 上的 *all* 迭代器无效?

std::vectorints;//...fillintswithrandomvaluesfor(std::vector::iteratorit=ints.begin();it!=ints.end();){if(*it此代码无效,因为调用pop_back()时,它无效。但我没有找到任何文档讨论std::vector::pop_back()中迭代器的失效。你有相关链接吗? 最佳答案 调用pop_back()删除vector中的最后一个元素,因此该元素的迭代器无效。pop_back()调用不会使最后一个元素之前的项目的迭代器无效,只有重

c++ - 公开 begin() 和 end() 的 const 和非常量版本,以使用智能指针迭代成员 vector

//目录.hclassCat{public:voidconst_meow()const{...};voidmeow(){...};};classCatLibrary{public:std::vector>::iteratorbegin(){returnm_cat_list.begin();}//compileerror,thecompilercomplainscannotcoverttype//from`std::vector>::const_iterator`//to`std::vector>::const_iterator`std::vector>::const_iteratorb

c++ - 为什么 vector::pop_back 会使迭代器 (end() - 1) 无效?

注意:该问题也适用于erase。见底部。end()-1迭代器在vector上调用pop_back后无效的原因是什么?为了澄清,我指的是这种情况:std::vectorv;v.push_back(1);v.push_back(2);std::vector::iteratori1=v.begin(),i2=v.end()-1,i3=v.begin()+1;v.pop_back();//i1isstillvalid//i2isnowinvalid//i3isnowinvalidtoostd::vector::iteratori4=v.end();assert(i2==i4);//undefi

已解决UnicodeDecodeError: ‘utf-8‘ codec can‘t decode bytes in position 1022-1023: unexpected end of dat

已解决使用pycharmrun运行代码正常,而debug却抛出异常UnicodeDecodeError:‘utf-8’codeccan’tdecodebytesinposition1022-1023:unexpectedendofdata,附上三种的正确解决方法,亲测有效!!!文章目录报错问题报错翻译报错原因解决方法1解决方法2解决方法3(亲测有效)千人全栈VIP答疑群联系博主帮忙解决报错报错问题粉丝群里面的一个小伙伴遇到问题跑来私信我,想用pycharmdebug,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解

c++ - 模拟条件 back_inserter 之类的最佳方法?

我想用以下代码中的算法替换循环intnumbers[]={...};vectoroutput;for(int*it=numbers+from;it!=numbers+to;++it){intsquare=func(*it);if(predicate(square)){output.push_back(square);}}该程序旨在转换值并在条件发生时将它们复制到目的地。我无法使用std::copy_if,因为那样不会应用转换。我无法使用std::transform因为它缺少谓词因为转换变量的中间拷贝,编写transform_copy_if()甚至不是一个好主意。看来我唯一的希望是创建一

c++ - 指向 deque<int>::push_back 的指针

#include#includeusingnamespacestd;main(){typedefvoid(deque::*func_ptr)(int);func_ptrfptr=&deque::push_back;}我试图获取指向该函数的指针,但出现编译错误error:cannotconvert‘void(std::deque::*)(constvalue_type&){akavoid(std::deque::*)(constint&)}’to‘func_ptr{akavoid(std::deque::*)(int)}’ininitializationfunc_ptrfptr=&deq