创建字符串数组的有效方法

时间:2018-08-09 01:56:22

标签: c++ string c++11 vector stdarray

我需要创建一个字符串数组,这样效率更高。

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)在初始化期间都是固定的。       请提出其他建议。

2 个答案:

答案 0 :(得分:4)

std::array<std::string, 3> arr{"aa", "bb", "cc"};string arr[3] = {"aa", "bb", "cc"};的性能应相同。 std::array将数组的大小烘焙为类型,以便在传递时不会降级为具有未知大小的指针(只需确保通过引用传递它以避免复制),并具有更多的C ++实用程序方法,但否则具有与C数组相同的性能和行为特征,因此这可能是可行的方法。

如果您可以使用C ++ 14,则可以通过使字符串std::string literals进行非常小的改进,使字符串从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

答案 1 :(得分:2)

我会去第三名。很简单,没有std::arraystd::vector

的编译时间或运行时间开销
string arr[3]                = {"aa", "bb", "cc"};