17

我通常不确定什么时候使用一个比另一个更好。总的来说,它们似乎都在做同样的事情,但是向量在可以做什么方面更灵活吗?什么时候数组更合适?

4

2 回答 2

16

通常总是更喜欢使用std::vector<T>,因为一旦向量超出范围,销毁将是自动的,分配的内存将整齐地放置在堆上,所有内存都将为您处理。 std::vector<T>为您提供数组中的所有内容,甚至保证元素将连续存储在内存中(除了std::vector<bool>)。

在这种情况下,std::vector<bool>您必须小心,因为这样的代码会中断:

 std::vector<bool> vb;
 vb.push_back(true);
 vb.push_back(false);
 vb.push_back(true);
 bool *pB = &vb[0];
 if( *(pB+1) )
 {
     // do something
 }

事实是,std::vector<bool>不存储连续bool的 s。这是 C++11 中修复的标准中的一个例外。

于 2012-06-02T21:01:31.163 回答
3

我只在使用嵌入式系统或某些 API 需要它时才真正使用数组(即,将它们作为函数的参数)。此外,如果只有一两个地方我需要使用数组,或者不需要特别需要向量功能,那么使用数组更有意义,因为 vector.h 的额外开销。

否则,只需使用向量:)

于 2012-06-02T21:00:19.020 回答