何时使用向量以及何时在C++中使用数组?

Joh*_*ith 16 c++ arrays vector

我通常不确定何时使用一个与另一个相比更好.它们似乎总体上做同样的事情但是它的功能更加灵活吗?阵列什么时候更合适?

Chr*_* A. 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
 }
Run Code Online (Sandbox Code Playgroud)

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

  • 幸运的是,`std :: vector <bool>`再次成为**C++ 11中的真正容器** (2认同)