首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地调整矢量的大小?

如何正确地调整矢量的大小?
EN

Stack Overflow用户
提问于 2012-12-05 12:13:43
回答 2查看 109关注 0票数 4

来自这个答案

您可能会遇到性能问题的一个地方是,从一开始就没有正确地调整矢量大小。

那么,当向量是类的属性时,如何正确地调整它的大小呢?是否有(最好的)方法来设置向量的容量(在初始化时)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-05 12:15:50

是的有。请参阅储备方法。它将要求向量的容量至少足以包含作为其参数发送的元素数。如果可以预测要存储在向量中的项目数量的上限,则可以在向量中保留该空间。

以上连结的例子-

代码语言:javascript
运行
复制
// 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个元素的空间,容量只会更改一次。

这里是一个正在运行的示例。

票数 2
EN

Stack Overflow用户

发布于 2012-12-05 12:21:56

考虑到类在构造函数期间被赋予一个值,明智的做法是存储向量的初始大小。当用户不断地扩展向量的大小,而不是首先设置矢量的基本长度时,就会出现效率低下的情况。

代码语言:javascript
运行
复制
//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
}

设置初始大小可以减少程序中需要扩展向量的次数。

编辑:或者备用方法会做同样的事情,从来不知道有一个备用函数存在(非常方便!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13723019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档