草庐IT

push-back

全部标签

c++ - vector.size() 的 GDB 错误值

一个简单的vector.push_back()导致我的代码出现一些错误:#includeusingnamespacestd;intmain(intargc,constchar*argv[]){vectorstack;stack.push_back(1);stack.push_back(1);//stack.size()becomes467369971afterthisstack.push_back(1);stack.push_back(1);...morepush_back()s...return0;}我正在使用GDB检查它的行为...奇怪的是stack.size()在第二个push_

c++ - std::vector push_back() 语义

我知道std::vector中的push_back在末尾放置了作为参数传递的对象的拷贝。让我们考虑这个简单的例子classFoo{public:Foo(inti=-1):i_(i){std::cout还有这段代码voidtestObjects(){std::vectorvFoo;for(inti=0;i我得到的结果是:Foo:100FoocopyCTOR:100i=0vectorsize=1~Foo:100Foo:101FoocopyCTOR:100FoocopyCTOR:101~Foo:100i=1vectorsize=2~Foo:101Foo:102FoocopyCTOR:100F

c++ - 仅当有足够内存可用时 vector push_back

我目前正在构建一个使用vector类动态处理大量内存的代码。代码正在使用push_back构建vector,其中重要的是要注意vector是二维的,表示数据矩阵。根据情况,该矩阵可能很小,也可能变得异常大。例如,数据矩阵可以有几行,每行1000列,也可以有1000行,列数相同,全是double数据类型。显然,这很容易成为一个问题,因为1000x1000x8=8000000字节,因此在内存中代表8MB。但是多10倍的列和多10倍的行呢?(这很容易在我的代码中发生)。我通过将数据矩阵写入硬盘来解决这个问题,但是这种方法相当慢,因为我没有充分利用RAM。我的问题:如何构建由vector>表示

c++ - 如何有效地 emplace_back(pair)?

我有usingnamespacestd;//forconvenienceinSOquestiononlyvector,int>>foo;并且想要emplace_back一个元素,其中pair::first持有{i,j,k}和pair::second持有q。我能得到这个编译的唯一方法是使用相当笨拙的foo.emplace_back(piecewise_construct,forward_as_tuple(i,j,k),forward_as_tuple(q));这是否有效(即保证tuple将被优化掉)?或者还有其他保证有效的方法吗?(我试过了foo.emplace_back(std::in

C++ 多结构 vector 错误

我正在尝试制作两个包含自定义结构的不同vector,但是当我尝试向vector添加元素时,它适用于“甲板”vector,但会引发“玩家”vector错误。我是C++的新手,不知道哪里出了问题。这些是它抛出的错误:warning:extendedinitializerlistsonlyavailablewith-std=c++11or-std=gnu++11|error:nomatchingfunctionforcallto'std::vector::push_back()'|这是我使用的代码:#include#include#includeusingnamespacestd;class

c++ - 并行 STL 是否处理插入迭代器,例如 std::back_insert_iterator?

并行STL算法是否符合std::back_insert_iterator??我可能误解了std::par和std::par_vec之间的区别,std::par_vec是否意味着输出范围是否需要预先分配?代码示例:autonumbers={1,2,3,4,5,6};autosquared=std::vector{};std::transform(**std::par/std::par_vec,**numbers.begin(),numbers.end(),std::back_inserter(squared),[](autoval){returnval*val;});更新简化问题,因为我

c++ - 为什么在此示例中必须使用 emplace_back move ?

以下最小工作示例在使用选项1或选项2下的代码时编译,但在使用选项3下的代码时不编译。我假设emplace_back()隐式使用/调用move构造函数,那么为什么需要显式move()呢?它与r-value和l-value有关系吗?或者这是否与需要转让所有权的std::unique_ptr有关?(我对这些概念还是陌生的,尤其是在这种情况下。)为了完整性,带有push_back()的选项4也不会编译,除非调用move()。#include#include#includeclassBeta{public:Beta(intx,inty,intz):mX(x),mY(y),mZ(z){};intm

Springboot启动出现Error to process server push response的解决方法

目录前言1.问题所示2.原理分析3.解决方法前言注意,此篇博客只提供一种bug排查思路,毕竟每个项目引起的依赖包冲突都不一致!1.问题所示启动Springboot的时候,5秒刷一次这个,大致如下:2023-12-1713:02:01.166WARN20196---[main]o.s.boot.actuate.endpoint.EndpointId:EndpointID'nacos-config'containsinvalidcharacters,pleasemigratetoavalidformat.

c++ - OpenGL _ Front 对象被 Back 对象覆盖。所以看不到

问题是,'table上的物体被table板覆盖,所以看不到它。'(我使用的是openGL3.7beta。我安装的文件是:http://ihoo1836.dothome.co.kr/opengl_vs2010+glutdlls37beta.zip)所有代码如下。#include#include#include#includefloatTableX=5.0;//Table'sXsizefloatTableY=8.0;//Table'sYsizefloatTableHeight=2.0;//Table'sHeightintwidth=400,height=400;//WindowSizein

c++ - std::vector push_back 在并行 for 循环中使用时失败

我有一个代码如下(简化代码):for(inti=0;i此代码运行良好,但如果我想使用ompparallelfor使其并行,我会在output.push_back上收到错误,并且似乎在调整vector大小期间,内存已损坏。问题是什么,我该如何解决?如何确保在任何时候只有一个线程将新项目插入vector? 最佳答案 简单的答案是std::vector::push_back不是线程安全的。为了安全地并行执行此操作,您需要同步以确保不会同时从多个线程调用push_back。C++11中的同步可以通过使用std::mutex轻松实现。