主要观点:作者加入新项目后对代码中的原始循环进行改进,用std::ranges::transform
替代原始循环,探讨了此改进带来的影响,如避免修改向量、减少特殊成员函数调用等,同时进行了基准测试,发现增强的原始循环版本在 Clang 上比原始循环版本快约 20%,GCC 上原始循环版本快约 10%,push_back
版本比其他两个版本慢 20 - 30%,结论是使用范围或算法比原始循环有可读性等优势,但纯粹性能不一定是优势,具体使用哪种版本取决于实际情况。
关键信息:
- 作者看到代码中的原始循环后用
std::ranges::transform
进行替换。 - 讨论了
transformed_data
变为视图后填充response.data
时是否复制元素的问题。 - 分别给出了使用原始循环、
std::ranges::transform
和emplace_back
的代码及输出。 - 基于 Quick Bench 的基准测试结果显示不同版本的性能差异。
- 强调要根据实际情况选择使用版本,不能盲目追求性能或可读性。
重要细节:
- 示例代码中包含多个结构体和函数,如
FromData
、Widget
、ToData
、Response
等。 - 代码中对
ToData
的构造函数、拷贝构造函数、移动构造函数和赋值运算符重载进行了定义。 - 基准测试结果显示不同编译器下各版本的性能差异情况。
- 提到 C++23 中可以使用
std::ranges::to<std::vector<Todata>>
构造最终的vector
,但对特殊成员函数调用次数无影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。