“std::vector”会做我没有做过的任何事情吗';我没有要求它这么做 在C++中,如果我初始化了 STD::向量V(100);

“std::vector”会做我没有做过的任何事情吗';我没有要求它这么做 在C++中,如果我初始化了 STD::向量V(100);,c++,vector,capacity,C++,Vector,Capacity,恢复这一切: std::vector<float> v; // somehow, `v' is initialized to have 100 elements void f() { // this function must return _very_ quickly /* do some processing, without ever calling v.resize() or v.reserve(), but accesing v.size() and

恢复这一切:

std::vector<float> v;
// somehow, `v' is initialized to have 100 elements
void f() { // this function must return _very_ quickly
    /* do some processing, without ever calling v.resize() or v.reserve(), but
       accesing v.size() and v[i] all the time */
    /* it is guaranteed that no system calls (such as memory management)
       will take place here? */
} // no objects on the stack whose destroyers might try to `delete' anything.
std::vector v;
//不知何故,“v”被初始化为有100个元素
void f(){//此函数必须快速返回
/*执行一些处理,而不调用v.resize()或v.reserve(),但是
始终计算v.size()和v[i]*/
/*保证无系统调用(如内存管理)
会在这里举行吗*/
}//堆栈上没有对象的销毁程序可能试图“删除”任何内容。

向量上的任何非常量操作都可能修改它。向量上的任何O(n)操作(如push_back)都可能导致底层数据被重新定位。您可以点击上的各个页面,查看您打算使用的操作的大Oh符号


对size和subscript运算符的调用必须在O(1)时间内完成,因此向量不会重新分配其缓冲区。

向量上的任何非常量操作都可能修改它。向量上的任何O(n)操作(如push_back)都可能导致底层数据被重新定位。您可以点击上的各个页面,查看您打算使用的操作的大Oh符号


对size和subscript运算符的调用必须在O(1)时间内完成,因此向量不会重新分配其缓冲区。

来自C++11 23.3.6.3“向量容量”中关于
vector::reserve()
的备注:

可以保证在插入过程中不会发生重新分配 调用
reserve()
直到插入 将使向量的大小大于
容量()


从C++11 23.3.6.3“向量容量”中的
vector::reserve()

可以保证在插入过程中不会发生重新分配 调用
reserve()
直到插入 将使向量的大小大于
容量()

vector::data()公开了分配的数组。因此,可以公平地假设,对向量的任何操作(相当于对vector::data()的任何修改)都不会影响内存分配。

有vector::data()公开分配的数组。因此,可以公平地假设,对向量的任何操作,相当于对vector::data()的任何修改,都不会影响内存分配