404*_*und 0 c++ optimization vector
哪个会更快?
std::vector< std::string > vec;
vec.reserve(10);
for (int i=0; i < 10; i++){
vec.emplace_back("Some text");
}
Run Code Online (Sandbox Code Playgroud)
或者
std::vector< std::string > vec;
vec.resize(10);
for (int i=0; i < 10; i++){
vec[i] = "Some Text";
}
Run Code Online (Sandbox Code Playgroud)
如果其中一个比另一个更快(大小为 10),哪一个更具可扩展性?
这将取决于平台、编译器和编译标志。
emplace_back
版本size
每次都需要增加向量。因此,如果不分析生成的代码和/或测量它,就无法判断。
根据google benchmark,该emplace_back
版本更快:
GCC 10.2 -O3:emplace_back
稍微快一点:
Clang 11 -O3:emplace_back
快得多:
MSVC 19.6 /O2:emplace_back
稍微快一点:
-----------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------
Emplace 138 ns 136 ns 4480000
Index 159 ns 160 ns 4977778
Run Code Online (Sandbox Code Playgroud)