【Example】C++ Vector 内存预分配的良好习惯

发布时间:2022-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【Example】C++ Vector 内存预分配的良好习惯脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

为什么要对 Vector 进行内存预分配?

1,Vector 本身是一个内存只会增长不会减小的容器。

2,Vector 存在 size 和 capacity 两种计数,size 即元素个数,capacity 则是容量即 vector 在内存当中的大小,理论上始终 capacity >= size。

3,Vector 的 push_back 函数逻辑是,当 capacity 不够的时候,去申请一块新内存,将原有数据拷贝到新内存再释放旧内存,中间有一个申请、拷贝、释放的操作。

4,最根本目的是加强 Vector 写入时的性能。

 

什么样的 Vector 需要进行内存预分配?

存储的对象内存消耗大且数量多的Vector。

如果一个Vector就存了几百条int,则没必要去折腾。

 

#include <iostream>

#include <vector>
using std::vector;

// 随便创建一个结构体
typedef struct Point {
    int x;
    int y;
    int val;

    // 顺带演示统一初始化 (现代C++)
    Point(int x, int y, int value) : x(x), y(y), val(value) {};
};

int main()
{
    // 定义两个 vector
    vector<Point> pointsT1;
    vector<Point> pointsT2;

    for (size_t i = 0; i < 45000; i++)
    {
        pointsT1.push_back(Point(i, i, -99999));
    }
    // 执行耗时 8.3213 毫秒
    pointsT2.reserve(45000);
    for (size_t i = 0; i < 45000; i++)
    {
        pointsT2.push_back(Point(i, i, -99999));
    }
    // 执行耗时 3.7997 毫秒

    return EXIT_SUCCESS;
}

 

=================================

由此可见,进行了预分配内存操作的 Vector 存入时间缩短了 65%。

TRANSLATE with 【Example】C++ Vector 内存预分配的良好习惯 x
English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
【Example】C++ Vector 内存预分配的良好习惯
【Example】C++ Vector 内存预分配的良好习惯 【Example】C++ Vector 内存预分配的良好习惯 【Example】C++ Vector 内存预分配的良好习惯
 
TRANSLATE with 【Example】C++ Vector 内存预分配的良好习惯
COPY THE URL BELOW
【Example】C++ Vector 内存预分配的良好习惯
【Example】C++ Vector 内存预分配的良好习惯 Back
EMBED THE SNIPPET BELOW IN YOUR SITE 【Example】C++ Vector 内存预分配的良好习惯
Enable collaborative features and customize widget: Bing Webmaster Portal
Back

脚本宝典总结

以上是脚本宝典为你收集整理的【Example】C++ Vector 内存预分配的良好习惯全部内容,希望文章能够帮你解决【Example】C++ Vector 内存预分配的良好习惯所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: