我很久以前用Borland C++编写,现在我正在尝试理解"新"(对我而言)C + 11(我知道,我们在2015年,有一个c + 14 ...但我正在工作在C++ 11项目上)
现在我有几种方法可以为字符串赋值.
#include <iostream>
#include <string>
int main ()
{
std::string test1;
std::string test2;
test1 = "Hello World";
test2.assign("Hello again");
std::cout << test1 << std::endl << test2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
他们都工作.我从http://www.cplusplus.com/reference/string/string/assign/了解到还有其他方法可供使用assign.但对于简单的字符串赋值,哪一个更好?我必须用8 std:string填充100多个结构,我正在寻找最快的机制(我不关心内存,除非有很大的区别)
eml*_*lai 12
两者都同样快,但= "..."更清晰.
如果你真的想要快速,请使用assign并指定大小:
test2.assign("Hello again", sizeof("Hello again") - 1); // don't copy the null terminator!
// or
test2.assign("Hello again", 11);
Run Code Online (Sandbox Code Playgroud)
这样,只需要一次分配.(你也.reserve()可以预先记录足够的内存来获得相同的效果.)
我尝试对这两种方式进行基准测试。
static void string_assign_method(benchmark::State& state) {
std::string str;
std::string base="123456789";
// Code inside this loop is measured repeatedly
for (auto _ : state) {
str.assign(base, 9);
}
}
// Register the function as a benchmark
BENCHMARK(string_assign_method);
static void string_assign_operator(benchmark::State& state) {
std::string str;
std::string base="123456789";
// Code before the loop is not measured
for (auto _ : state) {
str = base;
}
}
BENCHMARK(string_assign_operator);
Run Code Online (Sandbox Code Playgroud)
这是图形比较解决方案。看起来这两种方法同样更快。赋值运算符有更好的结果。
仅当必须分配基本字符串的特定位置时才使用 string::assign。
| 归档时间: |
|
| 查看次数: |
5635 次 |
| 最近记录: |