草庐IT

c++ - 为什么 vector(size) 比 new[] 慢?

我正在对一些STL算法进行基准测试,我对以下代码所花费的时间感到惊讶:(我用time命令测量了g++编译代码[没有优化])#includestructvec2{intx,y;vec2():x(0),y(0){}};intmain(intargc,char*argv[]){constintsize=200000000;std::vectortab(size);//2.26s//vec2*tab=newvec2[size];//1.29s//tab[0].x=0;//delete[]tab;return0;}vector初始化花费的时间是2.26秒,而new(和delete)花费的时间是1

c++ - std::vector::insert 是否按定义保留?

在std::vector上调用insert成员函数时,是否会在“推回”新项之前保留?我的意思是标准是否保证了这一点?换句话说,我应该这样做吗:std::vectora{1,2,3,4,5};std::vectorb{6,7,8,9,10};a.insert(a.end(),b.begin(),b.end());或者像这样:std::vectora{1,2,3,4,5};std::vectorb{6,7,8,9,10};a.reserve(a.size()+b.size());a.insert(a.end(),b.begin(),b.end());还是其他更好的方法?

c++ - 填充 boost vector 或矩阵

是否有一种单一表达式方法可以将标量分配给boost矩阵或vector的所有元素?我试图找到一种更紧凑的表示方式:boost::numeric::ublas::c_vectorv;for(size_ti=0;i以下不起作用:boost::numeric::ublas::c_vectorv(myScalar,myScalar,...andsoon...,myScalar);boost::numeric::ublas::c_vectorv;v=myScalar; 最佳答案 因为vector模型是一个标准的随机访问容器,所以您应该能够使用标

c++ - 计算 vector 中的出现次数

该程序从txt文件中读取数字字符串,将它们转换为整数,将它们存储在vector中,然后尝试以有组织的方式输出它们,就像这样....如果txt文件说:755731175程序输出:35372117所以如果数字出现不止一次,它会输出发生了多少次。这是到目前为止的代码。#include"std_lib_facilities.h"intstr_to_int(string&s){stringstreamss(s);intnum;ss>>num;returnnum;}intmain(){cout>file;ifstreamf(file.c_str(),ios::in);stringnum;vecto

c++ - 在这种情况下使用 std::vector 的哪个构造函数

这看起来很简单,但我很困惑:我创建一个包含一百个vector的方法,比方说,ints是std::vector*pVect=newstd::vector(100);但是,查看std::vector的documentation我看到它的构造函数的形式是explicitvector(size_typen,constT&value=T(),constAllocator&=Allocator());那么,前一个是如何工作的?new是否使用从默认构造函数获得的初始化值调用构造函数?如果是这样的话,会吗std::vector*pVect=newstd::vector(100,my_allocator

c++ - 如何将元素插入 vector 的开头?

我需要将值插入到std::vector的开头,并且我需要将此vector中的其他值推到更远的位置,例如:添加到vector开头的内容和值从位置1移动到位置2,从位置2移动到位置3等等。我该怎么做? 最佳答案 使用std::vector::insert接受iteratortothefirstelement的函数作为目标位置(在其之前插入元素的迭代器):#includeintmain(){std::vectorv{1,2,3,4,5};v.insert(v.begin(),6);}或者,append元素并执行rotation向右:#in

c++ - 绕过 vector<bool>,使用 basic_string<bool>?

这是一个安全的解决方法吗?我想使用vectorbool但需要将指针传递给需要C样式数组的旧代码。typedefstd::basic_stringvector_bool;intmain(){vector_boolab;ab.push_back(true);ab.push_back(true);ab.push_back(true);ab.push_back(false);bool*b=&ab[0];b[1]=false;}编辑:感谢您对其他解决方案的建议,但我真的很想对我的上述解决方案做出明确的回答。谢谢。 最佳答案 我不确定std::

c++ - std::vector.at()。它返回引用或拷贝吗?

我刚开始学习C++,我正在尝试std::vector的工作原理。我有这个测试程序:#include#includeintmain(){std::vectorelement1={1,2,3};std::vectorelement2={4,5,6};std::vector>lista={element1,element2};std::vectorvar=lista.at(0);for(std::vector::const_iteratori=var.begin();i!=var.end();++i)std::cout::const_iteratori=var.begin();i!=var.

C++ 如何将连续的区间插入到 std::vector 中?

假设我希望从23到57的所有数字都在vector中.我可以这样做:vectorresult;for(inti=23;i但这是一个简单工作的5行解决方案。我不能更优雅地做到这一点吗?最好的语法是vectorresult{23..57};例如或这样一个微不足道的一行代码。C++17的任何选项? 最佳答案 您可以使用std::iota(自C++11起)。Fillstherange[first,last)withsequentiallyincreasingvalues,startingwithvalueandrepetitivelyeval

c++ - 我可以强制 std::vector 留下内存泄漏吗?

我可以强制std::vector在vector超出范围后不释放它的内存吗?例如,如果我有int*foo(){std::vectorv(10,1);//trivialvectorreturn&v[0];}intmain(){int*bar=foo();std::cout不保证这些值仍可在此处访问。我目前只是在做这个int*foo(){std::vectorv(10,1);int*w=newint[10];for(inti=0;i但是重新填充一个全新的数组有点浪费。有没有办法强制std::vector不删除它的数组?注意:我没有返回vector本身,因为我正在使用SWIG将c++与pyth