给定一个 std::string
类型的字符串 s
,我像这样构建另一个字符串s2
std::string(s.begin(), s.begin() + s.find(" "))
但是下面的构造函数不起作用
std::string(s.begin(), s.find(" "))
有人知道为什么吗?我在 Ubuntu amd64 下使用 g++ 4.8.1
两个构造函数都有一个迭代器作为第二个参数。
在此示例中,我尝试构建一个包含第一个子字符串的字符串,该子字符串以第一个空格出现的位置结束。
最佳答案
std::string::find()
返回一个偏移量,而不是迭代器(是的,这很大程度上是标准库的设计不一致)。因此,要使用它(并包括适当的错误检查),请执行以下操作:
size_t offset = s.find(" ");
std::string(s.begin(), (offset == std::string::npos ? s.end() : s.begin() + offset);
关于c++ - 使用迭代器构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212735/