关于STL中Vector的一些问题

sky*_*oor 5 c++ stl vector

我对STL中的矢量有一些疑问以澄清.....

  1. 向量中的对象分配在哪里?堆?

  2. 矢量有边界检查吗?如果索引超出边界,会发生什么错误?

  3. 为什么数组比矢量快?

  4. 是否存在矢量不适用但阵列必须的情况?

zne*_*eak 7

  1. 在堆上的连续内存块中.A vector<int>以相同的方式分配内存new int[x].
  2. 仅在您使用该at方法时.std::out_of_range如果边界检查失败,则抛出异常.在operator[]不执行边界检查.
  3. 因为数组可以直接访问内存,所以访问vector元素很可能涉及方法调用.但差异可能非常小,特别是如果您的编译器决定内联调用.
  4. 通常,vector如果您希望容器具有动态大小,则使用a; 如果已知固定大小足够,则使用简单数组.一定要检查其他容器,比如dequelist,以确保选择最合适的容器.否则,如果您需要处理非C++ API,您显然需要访问常规数组.(编辑)@BillyONeal说你应该&vector[0]用来获取底层数组的地址,但要小心使用它,因为如果向量的容量发生变化它可以改变.

  • 你可以将向量传递给非C++ apis没问题.`&myVector [0]`需要返回一个指向向量内存的指针,只要向量的大小没有改变,它必须具有与内置数组相同的底层布局. (3认同)