为什么有人喜欢向量而不是数组?

时间:2013-01-11 00:10:23

标签: c++ arrays vector

  

可能重复:
  C++ STL vector vs array in the real world

开始我对C ++和C语言的高级知识有一点低于平均水平的知识很多时候,我想问一些相关的代码并包含或引用一些代码和array出现了所有人立即锁定这方面,并建议我应该使用vector,即使它不必做任何与我的问题相关的事情。

问题在于,这是我学习如何使用C ++的方式,显然我首先从学习普通C继承而且我已经习惯了,虽然我对使用向量也有信心,但我更喜欢{{ 1}}超过arrays

我的问题是为什么有人会使用vectors而不是vector,即使他习惯使用数组,他还能通过这样做获得什么? 另外如果array不是arrays优先于vectors,那么为什么不是每个人都只使用向量来做所有事情?

4 个答案:

答案 0 :(得分:5)

向量具有可在运行时提供的维度,例如用户提供的值或从文件内容派生的值。

相比之下,数组的大小必须硬编码到您的程序中。这是固定的。

  

为什么不是每个人都只使用矢量来做所有事情?

当您不需要时,使用向量而不是数组会产生运行时性能成本。就个人而言,我从未编写过这是瓶颈的代码,因此很少使用原始数组;仍然存在 do 这样的场景。


例外情况是您使用new[]创建一个内存块(在某种意义上为“数组”)动态;这是由std::vector封装的确切语言功能。

答案 1 :(得分:0)

其中一个原因是每个容器的性能行为as explained here

  

许多容器有几个共同的成员函数,并且共享   功能。决定使用哪种类型的容器   具体需要通常不仅仅取决于功能   由容器提供,但也有一些它的效率   成员(复杂性)。对于序列容器尤其如此,   它提供了不同的复杂性之间的权衡   插入/删除元素并访问它们。

答案 2 :(得分:0)

向量

  • 自己分配和释放内存
  • 展开时自动调整大小
  • 可以在STL容器可以使用的地方使用,其中包括许多算法和方法
  • 有许多其他有用的方法

阵列

  • 占用更少的内存
  • 用于C代码,因此用于反向兼容

答案 3 :(得分:0)

主要原因是std::vector的大小可以在运行时决定并且可以调整大小。该向量还支持迭代器,这意味着它适用于许多stl算法,例如std::for_eachstd::anyof。向量还可用于以安全的方式分配内存,并且与C函数兼容。

如果您使用的是Windows API,std::vector对于许多函数中使用的get-size-get-data范例非常有用。这是您通常两次调用相同函数的地方,第一次获取数据大小,第二次实际读取数据。例如:

DWORD size = 0;
DWORD type = 0;
if ( RegQueryValueEx( HKEY_LOCAL_MACHINE, 
    L"SOFTWARE\\Microsoft\\.NETFramework\\InstallRoot", 
    nullptr, 
    &type, 
    nullptr, 
    &size ) == ERROR_SUCCESS )
{
    std::vector<BYTE> data( size );
    if ( RegQueryValueEx( HKEY_LOCAL_MACHINE, 
        L"SOFTWARE\\Microsoft\\.NETFramework\\InstallRoot", 
        nullptr, 
        &type, 
        &data[0], 
        &size ) == ERROR_SUCCESS )
    {
      //We have read the data
    }
}

数组的大小在编译时决定,无法调整大小。数组仍在C中使用。