草庐IT

Layer-backed

全部标签

c++ - 为什么我不能 push_back 到 const 元素的 vector ?

这个问题在这里已经有了答案:DoesC++11allowvector?(5个答案)关闭7年前。push_back按预期工作到非常量元素vector:std::vectorfoo;intbar=0;foo.push_back(bar);但为什么下面的不可能呢?std::vectorfoo;constintbar=0;foo.push_back(bar);更准确地说,为什么可以创建foo对象但不能对其调用push_back?

c++ - STL算法和back_inserter可以预分配空间吗?

如果我有类似的东西:vectorlongVector={...};vectornewVector;transform(longVector.begin(),longVector.end(),back_inserter(newVector),[](inti){returni*i;});STL是否能够在处理和添加新元素之前在newVector中预分配空间?我知道这不是算法的要求,但是“好的”实现能够优化它吗?或者,对于这种情况,我应该更喜欢在之前添加newVector.reserve(longVector.size());吗?我不一定要问每个stdlib实现是否有(尽管如果有人知Prop体

c++ - std::vector<>::emplace_back() 中的异常安全吗?

在std::vector::emplace_back()中抛出异常时会发生什么?例如:classFoo{public:Foo(intbar){if(bar==4)throwstd::exception("Somethingwentwrong");}}和std::vector>foo_list;foo_list.emplace_back(newFoo(3));try{foo_list.emplace_back(newFoo(4));}catch(std::exceptionerror){//Howbadisit?}//Whatsinsidefoo_listnow?我希望vector只包含

c++:push_back() 和 back() 与指针的行为

我有两个C++列表,std::listList1和std::listList2;.现在,我想多次执行以下操作:List1.push_back(new_object);List2.push_back(&List1.back());我的问题:List2中的引用在每一步之后是否仍然有效?即:List2中的第一个元素是否仍然引用List1中的第一个元素等? 最佳答案 是的,它仍然有效。std::list插入不会使迭代器(或在这种情况下指向内容的指针)无效。 关于c++:push_back()和b

c++ - C++ 中 push_back 的词源是什么?

C++std::vector中push_back方法名称的基本原理是什么?例如,是否存在基于堆栈的来源(push是一种常见的堆栈操作)?是否有使用这些术语添加到序列中的预先存在的库?除了其他API使用的通用术语,如append和add,insert_end似乎在内部更自洽(虽然front和back确实存在于其他地方)。 最佳答案 如您所述,push和pop是堆栈操作的通用名称。它不仅仅是push和pop的原因是它可以与其他容器保持一致。std::vector只实现了push_back和pop_back,但是还有push_front和

c++ - 使用 back_inserter 复制算法

我不明白为什么这段代码是准确的vectorcoll;coll.reserve(2*coll.size());copy(coll.begin(),coll.end(),//zrodloback_inserter(coll)//przeznaczenie);coll.end()表示vector的结束。在我push_back任何东西(如back_insert_iterator所做的那样)之后,coll.end()返回的是与之前相同还是不同的东西?是否有不止一个终止迭代器?为什么即使添加了新内容,end()也可以用作容器的结尾?此外,您无法将代码应用于列表容器-它会卡住。这很重要,因为在vec

python - C++:迭代时std::vector中的push_back

以下代码片段提供了一个非常奇怪的输出。我期待一个溢出(Python给出一个MemoryError)#include#includeintmain(){std::vectora{1,2,3};for(autoconst&item:a)a.push_back(item);for(autoconst&item:a)std::cout输出:1,2,3,1,0,3,如何解释这个结果?如果你在Python中做类似的事情,它会给出一个内存错误。>>>a=range(0,20)>>>foriina:a.append(i)Traceback(mostrecentcalllast):File"",line

c++ - g++ 4.9.3 提示 friended ctor 对 .emplace_back() 是私有(private)的,但喜欢 .push_back()

我肯定遗漏了关于emplace()和friend的其中一个优点。这是一个完整的最小示例,它重现了g++4.9.3的问题:classFoo{public:classBar{private:friendclassFoo;Bar(Foo&foo):foo(foo){}Foo&foo;};Bar&getBar(){//bars.push_back(*this);//worksfinebars.emplace_back(*this);//Foo::Bar::Bar(Foo&)isprivatereturnbars.back();}private:std::vectorbars;};

c++ - pop_back() 可以减少 vector 的容量吗? (C++)

根据C++标准,是std::vector::pop_back()曾经允许减少vector的容量吗?我问是因为我想得到保证,以下代码不会抛出内存不足异常:my_vec.pop_back();if(...)my_vec.push_back(...);假设my_vec是一个std::vector.我猜有三种可能:是的,根据C++03和C++11这可能发生。不,C++11禁止这样做(但C++03不禁止)。不可以,C++03和C++11都禁止这样做。是的,我的问题与Doesstd::vector.pop_back()changevector'scapacity?有关,但我的问题具体是关于标准保证

c++ - 原子地 std::vector::push_back() 并返回索引

我需要创建一个函数,将一个值附加到vector并返回刚刚附加的值的索引。例子:intappend(std::vector&numbers,intnumber){intretval=numbers.size();//whatifsomeotherthreadcallspush_back(number)inbetweenthesecalls?numbers.push_back(number);returnretval;}我想以原子方式执行此操作,以便返回的索引始终正确,即使可能有多个线程将值附加到vector。如果push_back返回刚刚添加的项目的索引,那会很容易。如何保证返回正确的索