gpt4 book ai didi

c++ - 字符串中最优化的连接方式

转载 作者:IT老高 更新时间:2023-10-28 13:20:48 31 4
gpt4 key购买 nike

我们每天都会遇到很多情况,我们必须在代码中进行繁琐且非常多的字符串操作。我们都知道字符串操作是昂贵的操作。我想知道可用版本中哪个最便宜。

最常见的操作是串联(这是我们可以在一定程度上控制的)。在 C++ 中连接 std::strings 的最佳方法是什么以及加快连接速度的各种解决方法?

我的意思是,

std::string l_czTempStr;

1).l_czTempStr = "Test data1" + "Test data2" + "Test data3";

2). l_czTempStr = "Test data1";
l_czTempStr += "Test data2";
l_czTempStr += "Test data3";

3). using << operator

4). using append()

另外,使用 CString 比使用 std::string 有什么好处吗?

最佳答案

这是一个小测试套件:

#include <iostream>
#include <string>
#include <chrono>
#include <sstream>

int main ()
{
typedef std::chrono::high_resolution_clock clock;
typedef std::chrono::duration<float, std::milli> mil;
std::string l_czTempStr;
std::string s1="Test data1";
auto t0 = clock::now();
#if VER==1
for (int i = 0; i < 100000; ++i)
{
l_czTempStr = s1 + "Test data2" + "Test data3";
}
#elif VER==2
for (int i = 0; i < 100000; ++i)
{
l_czTempStr = "Test data1";
l_czTempStr += "Test data2";
l_czTempStr += "Test data3";
}
#elif VER==3
for (int i = 0; i < 100000; ++i)
{
l_czTempStr = "Test data1";
l_czTempStr.append("Test data2");
l_czTempStr.append("Test data3");
}
#elif VER==4
for (int i = 0; i < 100000; ++i)
{
std::ostringstream oss;
oss << "Test data1";
oss << "Test data2";
oss << "Test data3";
l_czTempStr = oss.str();
}
#endif
auto t1 = clock::now();
std::cout << l_czTempStr << '\n';
std::cout << mil(t1-t0).count() << "ms\n";
}

开启 coliru :

编译如下:

clang++ -std=c++11 -O3 -DVER=1 -Wall -pedantic -pthread main.cpp

21.6463 毫秒

-DVER=2

6.61773ms

-DVER=3

6.7855ms

-DVER=4

102.015 毫秒

看起来2)+=是赢家。

(同时使用和不使用 -pthread 进行编译似乎会影响计时)

关于c++ - 字符串中最优化的连接方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18892281/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com