发布于 2012-12-05 04:15:50
是的有。请参阅储备方法。它将要求向量的容量至少足以包含作为其参数发送的元素数。如果可以预测要存储在向量中的项目数量的上限,则可以在向量中保留该空间。
以上连结的例子-
// vector::reserve
#include <iostream>
#include <vector>
int main ()
{
std::vector<int>::size_type sz;
std::vector<int> foo;
sz = foo.capacity();
std::cout << "making foo grow:\n";
for (int i=0; i<100; ++i) {
foo.push_back(i);
if (sz!=foo.capacity()) {
sz = foo.capacity();
std::cout << "capacity changed: " << sz << '\n';
}
}
std::vector<int> bar;
sz = bar.capacity();
bar.reserve(100); // this is the only difference with foo above
std::cout << "making bar grow:\n";
for (int i=0; i<100; ++i) {
bar.push_back(i);
// This block will execute only once
if (sz!=bar.capacity()) {
sz = bar.capacity();
std::cout << "capacity changed: " << sz << '\n';
}
}
return 0;
}
您将看到,随着向foo
向量添加更多元素,其容量不断增加,但在第二种情况下,由于它已经保留了100个元素的空间,容量只会更改一次。
这里是一个正在运行的示例。
发布于 2012-12-05 04:21:56
考虑到类在构造函数期间被赋予一个值,明智的做法是存储向量的初始大小。当用户不断地扩展向量的大小,而不是首先设置矢量的基本长度时,就会出现效率低下的情况。
//consider the vector reads in chars from a string
VecClass::VecCalss(char * str)
{
size_t LEN = strlen(str);
Vect = std::vector<char>(LEN, '\0'); //start with the initial size of the char
}
设置初始大小可以减少程序中需要扩展向量的次数。
编辑:或者备用方法会做同样的事情,从来不知道有一个备用函数存在(非常方便!)
https://stackoverflow.com/questions/13723019
复制相似问题