给定s
类型的字符串std::string
我构建另一个字符串s2
,如此
std::string(s.begin(), s.begin() + s.find(" "))
但以下构造函数不起作用
std::string(s.begin(), s.find(" "))
谁知道为什么?我正在使用g++ 4.8.1 under Ubuntu amd64
两个构造函数都有一个迭代器作为第二个参数。
在这个例子中,我正在尝试构建一个包含第一个子字符串的字符串,该字符串在第一个空格出现的地方结束。
答案 0 :(得分:2)
std::string::find()
返回一个偏移量,而不是迭代器(是的,它主要是标准库的设计不一致)。所以要使用它(并包括正确的错误检查),请执行以下操作:
size_t offset = s.find(" ");
std::string(s.begin(), (offset == std::string::npos ? s.end() : s.begin() + offset);
答案 1 :(得分:1)
因为find
返回索引(size_type
)。因为字符串是一个连续的容器,s.begin() + s.find(" ")
将返回一个迭代器,因为它等同于调用std::string::iterator operator+=(std::string::size_type s)
。第二个当然是编译错误。
答案 2 :(得分:1)
也许你在考虑std::find()
算法,它返回一个迭代器?
#include <iostream>
#include <algorithm>
int main()
{
std::string s = "Derek Smalls";
std::string s2(std::begin(s), std::find(std::begin(s), std::end(s), ' '));
std::cout << s2 << std::endl;
}