我应该使用向量而不是数组吗?

时间:2014-05-15 10:13:56

标签: c++ arrays vector

如果我有MyClass类的固定数元素,我应该使用数组还是向量?,即:

MyClass* myArray[];

std::vector<MyClass*> myVector;

3 个答案:

答案 0 :(得分:5)

std::array或原始数组用于少量静态元素。

如果你有很多元素(超过100kb),你就会占用堆栈并要求堆栈损坏/溢出。在这种情况下,或者只能在运行时知道元素的数量,使用std::vector

答案 1 :(得分:2)

如果你知道编译时的数字 - 使用静态array

如果数字是动态的(从用户处获得) - vector可以更好地为您节省管理内存的障碍

答案 2 :(得分:2)

&#34;固定&#34;在这种情况下有两个含义。通常的一个是设置一次,永远不会改变,例如从输入读取的值。此值在运行时已知,需要在堆上进行动态分配。您的选项是带有 new 或向量的C风格数组;强烈建议您使用矢量。

#include <vector>
#include <iostream>
int main() {
    int size;
    std::cin >> size;
    int *myArray = new int[size];
    std::vector<int> myVector(size);
}   

&#34;固定&#34;也可以表示编译时常量,这意味着它对于程序的任何运行都是常量。您可以使用C样式数组或C ++数组(堆栈上的自动内存分配)。

#include <array>
int main() {
    const int size = 50;
    int myArray[size];
    std::array<int, size> myArray;
}

这些更快,但是您的程序需要访问足够的堆栈内存,这是您可以在项目设置中更改的内容。有关详细信息,请参阅this topic。如果数组的大小非常大,您可能需要考虑在Heap上分配(向量)。