草庐IT

abc_ic_ab_back_material

全部标签

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++ - 表达式 'ab' == "ab"在 C++ 中是否为真

我的问题听起来可能很愚蠢,但我必须在准备学士考试时回答这个问题。那么,您如何看待C++中的表达式'ab'=="ab"?这不是真的还是根本不合法和编译错误?我在谷歌上搜索了一下,了解到“ab”是int类型,而“ab”当然不是......我必须考虑的不是编译器所说的,而是语言的正式描述.. 最佳答案 它肯定会生成警告,但默认情况下,gcc会编译它。它通常应该是错误的。话虽如此,理论上应该可以在地址为数值等于“ab”的数值,表达式为真(尽管比较当然没有意义)。 关于c++-表达式'ab'=="

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++ - 从 abs(double) 而不是 int 获得双重结果

我需要计算两个double值之差的绝对值,并得到一个double结果。相反,我得到一个int。#include//...printf("a:%sb:%sdelta:%sabs:%s\n",typeid(a).name(),typeid(b).name(),typeid(a-b).name(),typeid(abs(a-b)).name());//Prints:a:db:ddelta:dabs:i如果减法的结果已经是double,为什么abs不使用doubleabs(doublex);签名?事实上,它怎么可能返回一个整数呢?最重要的是,我如何强制它返回一个double?以防万一,a和b实

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?有关,但我的问题具体是关于标准保证