给定一个类型为std::string的字符串std::string,我构建了另一个字符串s2,如下所示
std::string(s.begin(), s.begin() + s.find(" "))但是下面的构造函数不起作用
std::string(s.begin(), s.find(" "))有人知道为什么吗?我用的是g++ 4.8.1 under Ubuntu amd64
两个构造函数都有一个迭代函数作为第二个参数。
在本例中,我试图构建一个包含第一个子字符串的字符串,该字符串的末尾是第一个空格。
发布于 2013-11-26 09:17:37
std::string::find()返回一个偏移量,而不是迭代器(是的,这在很大程度上是标准库的设计不一致)。因此,要使用此方法(并包括正确的错误检查),请执行以下操作:
size_t offset = s.find(" ");
std::string(s.begin(), (offset == std::string::npos ? s.end() : s.begin() + offset);发布于 2013-11-26 09:17:59
因为find返回一个索引(size_type)。因为字符串是一个连续容器,所以s.begin() + s.find(" ")将返回一个迭代器,因为它等同于调用std::string::iterator operator+=(std::string::size_type s)。第二个当然是编译错误。
发布于 2013-11-26 09:36:12
也许您在考虑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;
}看到它在运行!
https://stackoverflow.com/questions/20212735
复制相似问题