创建字符串数组的有效方法
Efficient way to create array of string
我需要创建一个字符串数组,哪个更有效。
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::vector
string arr[3] = {"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
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.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::vector
string arr[3] = {"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
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