最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++之拼接長字符串問題

 更新時(shí)間:2023年08月01日 08:51:21   作者:carbon06  
這篇文章主要介紹了C++之拼接長字符串問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

c++ string 類型提供 opearator+= 以及 append 方法進(jìn)行字符串拼接,本文探討c++拼接長字符串執(zhí)行效率最高的方法。

以下是四種實(shí)現(xiàn)方式。

實(shí)現(xiàn)方式

operator +=

使用 string 類提供重載 += 方法拼接字符串。示例:

// length 參數(shù)代表拼接的字符串長度
void composeLongstringWithOperator(const unsigned int length,std::string& long_string)
{
    for (size_t i = 0; i < length / 9; i++)
    {
        char str[10];
        // randStr 方法構(gòu)造長度為9的隨機(jī)字符串
        long_string += (randStr(str,9));
    }
}

append

使用 string 類提供的append 方法拼接字符串。示例:

void composeLongstringWithAppend(const unsigned int length,std::string& long_string)
{
    for (size_t i = 0; i < length / 9; i++)
    {
        char str[10];
        long_string.append(randStr(str,9));
    }
}

reserve && operator +=

在拼接字符串之前為string 對(duì)象提前分配空間,然后使用 += 方法進(jìn)行拼接,示例:

void composeLongstringWithReserveAndOperator(const unsigned int length,std::string& long_string)
{
    long_string.reserve(length);
    for (size_t i = 0; i < length / 9; i++)
    {
        char str[10];
        long_string += (randStr(str,9));
    }
}

性能測試

測試方法

進(jìn)行10000次長字符串拼接,統(tǒng)計(jì)每種方式下耗時(shí),示例代碼如下:

#include <iostream>
#include <string>
#include <ctime>
#include <chrono>
char* randStr(char* str,const int len)
{
? ? int i;
? ? for(i = 0; i < len; ++i)
? ? {
? ? ? ? str[i] = 'A' + rand() % 26;
? ? }
? ? str[++i] = '\0';
? ? return str;
}
int main(int argc, char* argv[])
{
? ? (void) argc;
? ? // 第一個(gè)參數(shù)代表生成的字符串的長度
? ? const unsigned int length = atoi(argv[1]);
? ? // 第二個(gè)參數(shù)代表使用哪種方法進(jìn)行拼接
? ? const unsigned int type = atoi(argv[2]);
? ? srand(time(NULL));
? ? auto start = std::chrono::high_resolution_clock::now();
? ? switch(type)
? ? {
? ? ? ? case 1:
? ? ? ? ? ? std::cout << "composeLongstringWithReserveAndAppend";
? ? ? ? ? ? for(int i = 0; i < 10000; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? std::string long_string;
? ? ? ? ? ? ? ? composeLongstringWithReserveAndAppend(length,long_string);
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case 2:
? ? ? ? ? ? std::cout << "composeLongstringWithReserveAndOperator";
? ? ? ? ? ? for(int i = 0; i < 10000; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? std::string long_string;
? ? ? ? ? ? ? ? composeLongstringWithReserveAndOperator(length,long_string);
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case 3:
? ? ? ? ? ? std::cout << "composeLongstringWithAppend";
? ? ? ? ? ? for(int i = 0; i < 10000; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? std::string long_string;
? ? ? ? ? ? ? ? composeLongstringWithAppend(length,long_string);
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case 4:
? ? ? ? ? ? std::cout << "composeLongstringWithOperator";
? ? ? ? ? ? for(int i = 0; i < 10000; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? std::string long_string;
? ? ? ? ? ? ? ? composeLongstringWithOperator(length,long_string);
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? default:
? ? ? ? ? ? return 0;
? ? }
? ? auto end = std::chrono::high_resolution_clock::now();
? ? std::chrono::duration<double> diff = end - start;
? ? std::cout << " cost " << 1000 * diff.count() << " ms\n";
? ? return 0;
}

編譯

g++ -std=c++11 -O3 compose_long_string.cpp -o compose_long_string

性能表現(xiàn)

長字符串長度為1000000,每種方法進(jìn)行10000次拼接,

四種方法的耗時(shí)如下:

methodcost (ms)
reserve && append117304
reserve && operator122998
append125682
operator129071

結(jié)論

針對(duì)較短字符串,使用reserve提前分配空間對(duì)性能提升意義不大,當(dāng)字符串的長度很長是,使用reserve方法提前分配空間可以帶來比較大的性能提升。

operator+= 和 append 方法在進(jìn)行字符串拼接時(shí)性能表現(xiàn)幾乎一致。原因是stl 實(shí)現(xiàn)的operator+= 方式實(shí)際是直接調(diào)用了append 方法。

綜上,拼接長字符串時(shí)最優(yōu)方式是 reserve && append。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于C語言動(dòng)態(tài)內(nèi)存管理介紹

    關(guān)于C語言動(dòng)態(tài)內(nèi)存管理介紹

    大家好,本篇文章主要講的是關(guān)于C語言動(dòng)態(tài)內(nèi)存管理介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++20新特性之std::jthread和chrono庫擴(kuò)展

    C++20新特性之std::jthread和chrono庫擴(kuò)展

    C++20標(biāo)準(zhǔn)庫特性2.3 std::jthread2.3.1 jthread 語法格式 常用方法2.3.2 總結(jié)2.4 chrono庫擴(kuò)展2.4.1 語法格式與核心概念2.4.1.1 日歷類型創(chuàng)建2.4.1.2 ok() 判斷有效性2.4.1.3 常用方法2.4.2 舉例 本文記錄
    2026-06-06
  • C/C++中多態(tài)性詳解及其作用介紹

    C/C++中多態(tài)性詳解及其作用介紹

    這篇文章主要介紹了C/C++中多態(tài)性(polymorphism)詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C語言中的程序環(huán)境與預(yù)處理詳情

    C語言中的程序環(huán)境與預(yù)處理詳情

    這篇文章主要介紹了C語言中的程序環(huán)境與預(yù)處理詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • c語言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過程

    c語言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過程

    這篇文章主要介紹了c語言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++實(shí)現(xiàn)簡單的信息管理系統(tǒng)

    C++實(shí)現(xiàn)簡單的信息管理系統(tǒng)

    這篇文章主要為大家介紹了C++實(shí)現(xiàn)簡單的信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C語言 CRITICAL_SECTION用法案例詳解

    C語言 CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了C語言 CRITICAL_SECTION用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 淺談C語言的變量和常量

    淺談C語言的變量和常量

    這篇文章主要為大家詳細(xì)介紹了C語言的變量和常量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++ INI文件操作實(shí)現(xiàn)代碼

    C/C++ INI文件操作實(shí)現(xiàn)代碼

    本文章主要為分享C/C++ INI文件操作實(shí)現(xiàn)代碼,增加注釋和修復(fù)了一些問題。這里給出完整的實(shí)現(xiàn)文件,在需要的地方包含該頭文件就好了
    2020-02-02
  • C語言實(shí)現(xiàn)打磚塊游戲

    C語言實(shí)現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論

甘谷县| 阿尔山市| 开原市| 疏附县| 彰化市| 旌德县| 日照市| 商丘市| 卢湾区| 中超| 砚山县| 曲阳县| 大港区| 施甸县| 延安市| 体育| 昭平县| 无棣县| 田东县| 襄樊市| 马公市| 镇巴县| 武乡县| 历史| 建瓯市| 沁源县| 上高县| 五峰| 望奎县| 盐亭县| 阜宁县| 通化市| 深圳市| 澄江县| 准格尔旗| 阳谷县| 定州市| 耒阳市| 确山县| 兴海县| 兰坪|