c++ - 创建字符串数组的有效方法
问题描述
我需要创建一个更有效的字符串数组。
1.std::array<std::string, 3>arr {"aa", "bb", "cc"};
2.std::vector<std::string> arr = {"aa","bb","cc"};
3.string arr[3] = {"aa", "bb", "cc"};
注意:在我的情况下,所有字符串(aa,bb,cc)在初始化期间都是固定的。如果有的话,请建议任何其他方式。
解决方案
std::array<std::string, 3> arr{"aa", "bb", "cc"};
并且string arr[3] = {"aa", "bb", "cc"};
应该具有同样的性能。std::array
将数组大小烘焙到类型中,因此在传递时它不会降级为大小未知的指针(只需确保它通过引用传递以避免复制),并且具有更多 C++ 实用程序方法,但在其他方面具有相同的性能和行为特征作为 C 数组,所以这可能是要走的路。
如果您可以使用 C++14,则可以通过使字符串std::string
字面量进行非常小的改进,这允许它们从 C 样式字符串转换为std::string
稍微更有效(大小在编译时烘焙,因此它可以使用已知长度的构造函数,而不是必须首先扫描NUL
终止符的构造函数)。
using namespace std::string_literals;
std::array<std::string, 3> arr{"aa"s, "bb"s, "cc"s}; // s suffix makes them string literals
推荐阅读
- kotlin - 如何实例化一个实现java接口的对象?(即 2 个 lambda)
- ssh - Ansible 在临时任务中途失败并出现错误:无法将数据发送到远程主机
- vim - 为什么 c/_
行为与 cf_ 不同? - owl - 如何在 protege 5.5.0 中使用另一个数据属性的数据属性中放置公式?
- python - 如何编写一个函数来将数据拟合到 N 个类似高斯的峰值的总和,而不明确定义每个可能的 N 的表达式?
- typescript - 在带有 if 语句的打字稿中使用 switch
- c# - 为什么我的数据网格中的每个单元格都显示“System.Data.DataRowView”而不是实际数据?(WPF)
- php - 自定义端点和 X-WP-TotalPages(标头)标头为空
- odoo - 当我尝试在我的 odoo 12 localhost 中打开设置时,它给了我错误(keyerror:“iap.account”)
- javascript - 浏览器在客户端读取大文件夹时挂起