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

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

最佳答案

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

关于c++ - 创建字符串数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51757814/

相关文章:

c++ - 在 C++ 中测量 APDU 命令到 Java Card 的时间的最佳方法

c++ - int **p 是什么意思?

c++ - 必须在模板化类上调用对非静态成员函数的引用

c++ - 如何使用字符串流格式化十六进制数字

c++ - std::set 错误:»operator<« 不匹配

iphone - OpenCV 人脸检测 - vector 问题

python - 优雅的数据分块方式

c# - 以准确的方式将字符串转换为日期

c++ - 将 int 值附加到字符串?

c++ - 如何使用一个类使一个变量可用于多个 .cpp 文件?