草庐IT

EidosValue_Int_vector

全部标签

C++ vector 不像数组

几个月来我一直在研究C++,并且大多数时候被谷歌指示堆栈溢出对于C++查询。我经常注意到这种类型的劝告“你为什么不使用vector”,并受到启发而这样做。所以,主要是为了获得自动内存释放的次要好处,并能够编写用于排序的类型化比较函数。我将指向对象的指针数组切换为vector。现在我认为(似乎不正确)可以使用vector或多或少像数组,因此我这样初始化:clusterclusters[LOTS];vectorpclust;pclust.reserve(numClust);for(inti=0;i编译器没有投诉。然后一段时间后我需要对一些vector进行排序集群对象的属性。所以:std::

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++ - 为什么 sqrt() 在没有为 int 定义的 int 变量上工作正常?

第3章Programming:PrinciplesandPracticeusingC++(第六次打印),Stroustrup指出(第68页):“请注意,sqrt()不是为int定义的”.下面是一个基于该章的简单C++程序:#include"std_lib_facilities.h"intmain(){intn=3;cout鉴于上面的引用,我预计编译或运行该程序的过程会以某种方式失败。令我惊讶的是,编译它(使用g++(GCC)4.2.1)并成功运行,没有错误或警告,并产生了以下完美的输出:Squarerootofn==1.73205因此我的问题是:如果sqrt()确实没有为int定义,那

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++ - 如何创建一个具有 32 位 int 和四个 8 位 char 类型的 union ,每个 char 类型都引用 32 位 int 的不同切片?

我想创建一个最大成员是32位整数的union。主要写到这里。然后是四个8位变量,可能是char类型,每个变量将引用32位整数的不同部分,例如:union{int32myint;charchar1[7:0];charchar2[15:8];charchar3[23:16];charchar4[31:24];}但我不确定如何在C++中执行此操作。 最佳答案 这可能有效:union{int32myint;charchars[4];}; 关于c++-如何创建一个具有32位int和四个8位char