首页 > 解决方案 > 创建字符串数组的有效方法

问题描述

我需要创建一个更有效的字符串数组。

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)在初始化期间都是固定的。如果有的话,请建议任何其他方式。

标签: c++stringc++11vectorstdarray

解决方案


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

推荐阅读