草庐IT

c++ - 动态数组与 STL vector 的确切区别?

动态数组和vector之间的确切区别是什么。这是我的面试问题。我说的都是顺序内存。vector的大小可以在代码中的任何位置增加。然后他说即使是动态数组也可以在创建后增加大小。我说过vector没有错误,因为它在标准库中。他说他将提供动态数组的.so文件,该文件没有错误并且具有与STL同等的所有品质。我很困惑,没有回答确切的区别。我在网上搜索时,只看到了上面的说法。有人可以向我解释确切的区别吗?面试官对我有什么期望? 最佳答案 Hesaidhewillprovideas.sofileofdynamicarrayswhichiserro

C++11 - 2 个 vector 之间的 emplace_back 不起作用

我试图调整一些代码并使用emplace_back()将内容从一个vectormove到另一个vector#include#includestructobj{std::stringname;obj():name("NO_NAME"){}obj(conststd::string&_name):name(_name){}obj(obj&&tmp):name(std::move(tmp.name)){}obj&operator=(obj&&tmp)=default;};intmain(intargc,char*argv[]){std::vectorv;for(inti=0;ip;for(int

c++ - 类指针 vector 上的 std::sort()

我有一个类指针vectorstd::vectorlistSquares.我想用类的属性之一作为键对它进行排序。这就是我正在做的boolcompById(Square*a,Square*b){returna->getId()getId();}std::sort(listSquares.begin(),listSquares.end(),compById)但是编译器说:错误:没有匹配函数来调用'sort(std::vector::iterator,std::vector::iterator,)'我做错了什么? 最佳答案 为了使用comp

c++ - 为什么 std::vector 使用 move 构造函数,尽管声明为 noexcept(false)

无论我在互联网上的什么地方阅读,强烈建议如果我希望我的类(class)与std::vector一起工作(即std使用我类(class)的move语义::vector)我应该将构造函数delcaremove为'noexcept'(或noexcept(true))。为什么std::vector使用它,即使我将它标记为noexcept(false)作为实验?#include#includeusingstd::cout;structT{T(){coutt_vec;t_vec.push_back(T());}输出:T()T(T&&)~T()~T()为什么?我做错了什么?在gcc4.8.2上编译,

c++ - vector 会自动调整大小吗?

非常抱歉,我问了这样一个初学者问题,但我在网上发现了相互矛盾的信息。我会在大学问,但要等到明年2月。vector会自动调整大小吗?或者您是否需要定期检查当前大小并在需要更多空间时调整大小。它看起来会自动为我调整大小,但我不确定这是一个功能还是编译器挥舞着魔杖。 最佳答案 如果您使用push_back或insert,是的,vector会自行调整大小。这是一个演示:#include#includeusingnamespacestd;intmain(){vectora;a.push_back(1);a.push_back(2);a.pus

c++ - const 指针的 vector ?

这个问题在这里已经有了答案:DoesC++11allowvector?(5个答案)关闭7年前。以下不编译(非常详细的错误,但基本上是“不能重载”和“从‘constvoid*’到‘void*’的无效转换”)。我能理解为什么例如push_back()可能无法编译,因为你不能复制/移动到Foo*const,但为什么不能编译:#includeusingnamespacestd;classFoo;intmain(){vectorvec;}

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