C++ 在C++;?

C++ 在C++;?,c++,arrays,vector,C++,Arrays,Vector,我通常不确定什么时候用一个比另一个好。一般来说,它们似乎都做相同的事情,但向量在做什么方面更灵活吗?什么时候数组更合适?我只在使用嵌入式系统时,或者在某些API需要时才真正使用数组(即将它们作为函数的参数)。另外,如果只有一两个地方需要使用数组,或者不特别需要向量功能,那么仅仅因为vector.h的额外开销,使用数组就更有意义 否则,只需使用vectors:)通常更喜欢使用std::vector,因为一旦向量超出范围,销毁将自动进行,分配的内存将整齐地放在堆上,所有内存都将为您处理std::ve

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

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


否则,只需使用vectors:)

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

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

 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 vb;
vb.推回(true);
vb.推回(false);
vb.推回(true);
bool*pB=&vb[0];
如果(*(pB+1))
{
//做点什么
}

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

我建议几乎从不使用数组。但是,数组是指<代码> []/Cuth>还是<代码> STD::数组< /代码>?在C++中,向量和数组之间的主要区别是向量做了自动动态内存管理,而数组是固定的。在期望数组时,可以传递向量:<代码> FangFoc(和V(0));<代码>。不过,您的另一点是有效的。根据您使用数组的方式和频率以及程序的需要,向量的开销可能会过大。@chris您在说什么开销?向量为容量存储一个额外的整数,仅此而已。事实上,无论如何,大多数应用程序都需要这个。而且包括头的开销是可以忽略的,而且在大多数情况下,当你编写现代C++(某些嵌入式平台除外)时,它仍然存在。“克里斯啊,那你错了。向量没有函数调用开销。事实上,就性能而言,它完全等同于使用C数组。实际上,我是百万分之一的程序员(在一个生物信息学库中工作过),所以我们确实非常仔细地衡量了这一点。@crsn,不管类成员的顺序如何。假设存在一个元素,
v[0]
需要给您一个指向连续元素序列的第一个元素的指针(就像
newint[5]
返回的相同类型的指针)。幸运的是
std::vector
在C++11+1中再次成为一个真正的容器,因为它将被整齐地放在堆上(我的重点),这意味着意外地在数组外写入不会破坏堆栈。