【发布时间】:2012-06-07 14:44:59
【问题描述】:
我通常不确定什么时候使用一个比另一个更好。总的来说,它们似乎都在做同样的事情,但是向量在可以做什么方面更灵活吗?什么时候数组更合适?
【问题讨论】:
-
我的建议是几乎从不使用数组。但是,数组是指
type []还是std::array? -
向量和数组在 C++ 意义上的主要区别在于,向量执行自动动态内存管理,而数组是固定的。
我通常不确定什么时候使用一个比另一个更好。总的来说,它们似乎都在做同样的事情,但是向量在可以做什么方面更灵活吗?什么时候数组更合适?
【问题讨论】:
type [] 还是std::array?
我只在使用嵌入式系统或某些 API 需要它时才真正使用数组(即,将它们作为函数的参数)。此外,如果我只有一两个地方需要使用数组,或者不需要特别需要向量功能,那么使用数组更有意义,因为 vector.h 的额外开销。
否则,只需使用向量 :)
【讨论】:
someFunc (&v[0]);。
v[0] 需要为您提供指向连续元素序列的第一个元素的指针(就像new int[5]返回的同一种指针)。
通常总是更喜欢使用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> 不存储连续的bools。这是 C++11 中修复的标准中的一个例外。
【讨论】:
std::vector<bool> 再次成为 C++11 中的真正容器