草庐IT

Layer-backed

全部标签

c++ vector emplace_back 更快?

如果我有课classfoo{public:foo(){//spendsometimeanddosomething.}private://somedatahere}现在我有一个foo的vector,我想把这个vector放到另一个vector中vectorinput;//assumeithas5elementsvectoroutput;这两条线有任何性能差异吗?output.push_back(input[0])output.emplace_back(input[0]) 最佳答案 IsthereANYperformancediffer

c++ - emplace_back 和继承

我想知道是否可以使用emplace_back将项目存储到vector中,emplace_back是一种派生自vector所期望的类的类型。例如:structfruit{std::stringname;std::stringcolor;};structapple:fruit{apple():fruit("Apple","Red"){}};其他地方:std::vectorfruits;我想在vector中存储一个apple类型的对象。这可能吗? 最佳答案 没有。vector仅存储固定类型的元素。你想要一个指向对象的指针:#include

c++ - 在 C++ 中重载 "+"orerator 时 that.vect.push_back(0) 和 that.vect.begin() 出错

classPolinom{public:std::vectorvect;Polinomoperator+(constPolinom&that){if(this->vect.size()>that.vect.size()){for(inti=that.vect.size();ivect.size();i++)that.vect.push_back(0);//here}elseif(that.vect.size()>this->vect.size()){for(inti=this->vect.size();ivect.push_back(0);}std::vectorsum;std::ve

c++ - 为什么 push_back 在包含 unique_ptr 的结构上成功,除非该结构具有自定义析构函数?

当且仅当我删除Foo的自定义析构函数时,以下代码才能编译。structFoo{std::unique_ptrbar;~Foo(void){}//ThisLine};std::vectorfoos;foos.push_back(Foo());以下是我认为我对这种情况的理解:失败是因为unique_ptrs无法复制,std::vector::push_back(thing)调用thing's复制构造函数。如果我写Foo显式移动bar的自定义复制构造函数,那么一切都会好起来的。但是,禁用ThisLine将导致代码编译。我认为即使没有ThisLine也应该编译失败,因为我仍在尝试push_ba

c++ - 对 pop_back() 感到困惑,C++

我试图理解vector::pop_back()的行为。所以我有以下代码片段:vectortest;test.push_back(1);test.pop_back();cout也许它是对的,但令我惊讶的是它打印出1。所以我很困惑。pop_back()是否只能删除具有index>0的元素?提前致谢! 最佳答案 您通过在空vector上调用front来调用未定义的行为。这就像超出数组边界的索引。任何事情都可能发生,包括返回1。 关于c++-对pop_back()感到困惑,C++,我们在Stac

c++ - push_back 到 vector c++ 时出现段错误

我正在尝试使用push_back方法将空白对象附加到列表。主要.cppvectorfacial_memory;printf("2\n");//Addpeoplefacememoriesbasedonnumberofsectionsfor(inti=0;i在push_back方法调用中,程序因段错误而崩溃。我环顾了类似的问题,他们指出了我在这里的解决方案。我也尝试将FacialMemory()传递到push_back调用中,但仍然是同样的问题。FacialMemory类定义如下:面部内存.hclassFacialMemory{private:vectorface_memory;publi

c++ - 为什么默认构造函数不适用于 `vector::emplace_back`

#include#include#includestructPersonA{intage;std::stringname;PersonA(int_age,conststd::string&_name):age(_age),name(_name){}};structPersonB{intage;std::stringname;PersonB(int_age,conststd::string&&_name):age(_age),name(_name){}};structPersonC{intage;std::stringname;};intmain(){std::vectorpersonA

c++ - 从 std::deque 线程安全地同时调用 emplace_back() 和 operator[]() 吗?

来自emplace_back()的文档摘录:IteratorvalidityAlliteratorsrelatedtothiscontainerareinvalidated,butpointersandreferencesremainvalid,referringtothesameelementstheywerereferringtobeforethecall.DataracesThecontainerismodified.Nocontainedelementsareaccessedbythecall:concurrentlyaccessingormodifyingthemissafe

c++ - 在 vector<vector<string>> 上使用 push_back

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。这么一个简单的问题让我陷入困境,我感到有些尴尬,但经过几个小时的谷歌搜索毫无结果后,我仍然被困住了。为了简化我的问题,第二行崩溃了:vector>sorted_words;sorted_words[0].push_back("hello");sorted_words[0]不应该代表一个我可以合法push_back的空vector吗?

c++ - 为什么C++标准队列有back函数,stack没有bottom函数?

在许多非官方C++引用网站之一上,列出了std::queue的成员函数front()和back().然而,std::stack只有top()函数。堆栈没有bottom()函数是有意义的,因为那是堆栈的定义。我不明白的是,为什么C++标准委员会选择不遵循队列的定义并为队列提供back()函数,而选择遵循堆栈的定义并且不提供bottom()函数。 最佳答案 back()可能还有其他原因,但您需要它来创建队列,因为C++03的习惯用法是廉价地将“空”对象复制到容器中,然后swap将新元素与复制成本非常高的“完整”对象交换。由于移动语义,这