草庐IT

vector_c

全部标签

c++ - 为什么 std::accumulate 生成 705032704 作为输出而不是 vector 中元素的总和?

输出是705032704而不是5000000000。这是为什么?我认为std::accumulate会计算vector中元素的总和。#include#include#include#include#include#include#include#include#includetypedeflonglongll;intmain(){std::vectornums={1000000000,1000000000,1000000000,1000000000,1000000000};std::cout 最佳答案 整数溢出。std::accum

c++ - 纯虚拟类和集合( vector ?)

我正在开发一个相当广泛地使用虚拟类的图形应用程序。它有:图片类,本质上是形状的集合。一个形状类,它是纯虚拟的,有几个类继承自它:圈子多边形矩形一个Figureshape,它是任何图形图形(也是虚拟的),shape继承自此。基本上,我的问题归结为实现图片类,它基本上用于存储形状集合。我目前正在使用Vector来存储形状,但是,很明显这是错误的决定,因为Vector实例化了这些形状,这并不好,因为它们是纯虚拟的。下面是我目前的代码库(总结了一下):classFigure{public:...virtual~Figure();...};classShape:publicFigure{publ

c++ - 在 vector 的每个结构元素中重置值的最快方法?

非常喜欢thisquestion,除了那个vector我有vector.如果我想重置(或者就此而言,设置为某个值)myType.myVar对于vector中的每个元素,最有效的方法是什么?现在我正在迭代:for(inti=0;i但是既然vector保证连续存储,肯定有更好的方法吗? 最佳答案 重置需要遍历vector的每一个元素,所以需要至少O(n)的复杂度。您当前的算法采用O(n)。在这种特殊情况下,您可以使用operator[]而不是at(这可能会引发异常)。但我怀疑这是您应用程序的瓶颈。在这条注释上,您可能应该使用std::f

c++ - 初始化列表与 vector

在C++11中,可以使用初始化列表来初始化函数中的参数。它的目的是什么?不能用constvector做同样的事情吗?下面这两个程序有什么区别?使用初始化列表:#includeusingnamespacestd;intsumL(initializer_listl){intsum=0;for(constautoi:l){sum+=i;}returnsum;}intmain(){cout使用常量vector:#include#includeusingnamespacestd;intsumV(constvectorl){intsum=0;for(constautoi:l){sum+=i;}re

c++ - vector.resize() 方法在调整大小时是否调用默认元素构造函数?

我正在尝试以下代码:struct_Struct2{void*ptr;doubledval;};struct_Struct{floatfval;intival;std::vectordata;};std::vectorvec;intmain(){vec.resize(9);for(inti=0;iresize(9)应该分配9个_Struct类型的元素。而且,事实上它是有效的。但是_Struct类型的每个元素都没有被初始化,尤其是数据元素,它是另一个std::vector。我希望它被初始化为空的std::vector。必须手动执行吗?我认为resize()方法会调用每个_Struct元素的

c++ - 错误 : invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector<bool>::reference {aka std::_Bit_reference}’

为什么我会收到错误:从类型为“std::vector::reference{akastd::_Bit_reference}”的右值对类型为“bool&”的非常量引用进行无效初始化?vector>vis;bool&visited(intx,inty){returnvis[x][y];//error}据我所知,vector中的operator[]返回引用,所以它应该是一个左值,但它不起作用。我应该怎么做才能让它发挥作用? 最佳答案 那是因为std::vector不是它看起来的样子。std::vector有一个特化与类型bool-它是空间

c++ - 默认情况下,std::vector 是线程安全和并发的吗?为什么或者为什么不?

使动态数组线程安全和并发意味着什么?例如,std::vector。两个线程可能想插入到同一个位置。不需要同步,因为它将根据线程调度完成。一个线程删除而另一个线程访问同一个元素?我认为这不是数据结构问题,而是使用问题。那么,是否需要对std::vector做些什么来使其线程安全和并发,或者默认情况下它是线程安全和并发的? 最佳答案 C++11标准库中关于容器线程安全的规定如下:23.2.2Containerdataraces[container.requirements.dataraces]Forpurposesofavoidingd

c++ - 错误 C2039 : 'vector' : is not a member of 'std'

我是C++的新手,我正在尝试制作一款地牢爬虫小游戏。目前我在我的头文件中声明了多个vector,但它们似乎给出了多个错误。我曾尝试在StackOverflow上搜索此问题,但答案似乎并不奏效。这是我的头文件之一:(Hero.h)#pragmaonceclassHero{public:Hero();std::stringname;intexperience;intneededExperience;inthealth;intstrength;intlevel;intspeed;std::vectoritems=std::vector();voidlevelUp();private:};这是

c++ - 将 std::vector<boost::optional<double>> 转换为 std::vector<double>

我有一个std::vector>,foo说。在这个特定的例子中,我需要一个std::vector其他vector中的任何“可选”元素映射到新vector中的0。我是否缺少针对此问题的单线解决方案?另一种选择是不尽如人意std::vectorout(foo.size());for(auto&it:foo){out.push_back(it?*it:0.0);}我欢迎基于std::optional的解决方案,即使我还没有使用该标准。 最佳答案 std::transform解决方案:std::vectorout(foo.size());s

c++ - 将临时对象移动到 vector 中

#include#include#includeinti=0;structA{A():j(++i){std::coutvec;voidfoo(vec&v){v.push_back(std::move(A()));}intmain(){vecv;foo(v);foo(v);}上面的例子产生下一个输出:constructor1move1destructor1constructor2move2move1destructor1destructor2destructor1destructor2问题:为什么执行了第一个析构函数(但没有为第二个对象执行)?为什么第二个对象的移动在第一个对象的移动之前