C++从一个字符向量中获取一个子字符串

C++ get a substring from a vector of chars

本文关键字:一个 获取 字符串 向量 C++ 字符      更新时间:2024-09-28

我有一个字符向量:

std::vector<char> V = {'A', 'B', 'C', 'D'};

如何从这个向量中提取子字符串?例如,我想获得一个";ABC";类型为CCD_ 1的值。最有效的方法是什么?

我也希望避免复制数据,因为我不会修改字符串。

std::string拥有它所持有的数据,因此不可能在不复制字符的情况下创建一个数据。C++17提供了一个非拥有的std::string_view,它不会创建副本(但正因为如此,您需要确保向量的生存期足够长,以供string_view使用(。

std::string s1 (V.data(), V.data() + 3); //iterator constructor
std::string s2 (V.data(), 3); //pointer + count constructor
std::string_view sv1 (V.data(), V.data() + 3); //iterator constructor
std::string_view sv2 (V.data(), 3); //pointer + count constructor

std::vector<char>有一个名为data()的成员函数,它可以返回字符缓冲区(如果它以"\0"结尾,它将是一个c字符串-不确定这种更改是否适用(。这个你不需要复制。

如果您想要std::string,则需要一份副本:

std::string s(v.begin(), v.end());

如果您只需要一个类似字符串的变量,您可以使用c-string或std::string_view,后者是一个非拥有字符串。