“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()的任何修改,都不会影响内存分配