C++11 C++;使用迭代器的顺序容器初始化
我试图通过容器(InputIt First,InputIt Last)创建容器的子容器。例如,我有一个字符串s1=“AreYouOK”。 预期产出如下:C++11 C++;使用迭代器的顺序容器初始化,c++11,iterator,containers,C++11,Iterator,Containers,我试图通过容器(InputIt First,InputIt Last)创建容器的子容器。例如,我有一个字符串s1=“AreYouOK”。 预期产出如下: A Ar Are AreY AreYo AreYou AreYouO 这是我的密码: #include <vector> #include <string> #include <iostream> using std::vector; using std::string; using std::cout;
A
Ar
Are
AreY
AreYo
AreYou
AreYouO
这是我的密码:
#include <vector>
#include <string>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main()
{
string s1 = "AreYouOK";
vector<string> v;
for (string::const_iterator iter = s1.begin();
iter != s1.end()-1; ++iter)
{
string s(s1.begin(),iter); // no matching container
s += *iter;
v.push_back(s);
}
for (vector<string>::const_iterator iter = v.begin();
iter != v.end(); ++iter)
{
cout << *iter <<endl;
}
return 0;
}
在[s1.begin(),iter]范围内创建字符串s1的子字符串s,因为iter是s1的迭代器。但是,有人告诉我,初始化时没有匹配的构造函数
error: no matching constructor for initialization of 'string'
(aka 'basic_string<char, char_traits<char>, allocator<char> >')
string s(s1.begin(),iter);
^ ~~~~~~~~~~~~~~~
已成功创建子字符串
为什么
没用
非常感谢!例如,如果您查看,您可以看到完整的错误消息包含
prog.cpp:19:33: error: no matching function for call to 'std::basic_string<char>::basic_string(std::basic_string<char>::iterator, std::basic_string<char>::const_iterator&)'
在这里,您确实使用了两个常量迭代器(请参见预期的输出)
编辑 两个优秀(且更优秀)的备选方案是:
cbegin
累计
,一旦你使用了该算法(@PaulMcKenzie)s1.begin()
返回一个迭代器
,而iter
是一个const\u迭代器
。没有一个构造函数采用(迭代器,const\u迭代器)对。如果使用,可以避免这种情况,只是将其更改为字符串s(s1.cbegin(),iter)会更简单吗
@rici这是一个很好的观点,但它没有标记为C++11,因此如果OP有,请拨打IDK。不过,我会将其作为注释添加。谢谢。
string s(s1.begin(),s1.begin+3);
string s(s1.begin(),iter);
prog.cpp:19:33: error: no matching function for call to 'std::basic_string<char>::basic_string(std::basic_string<char>::iterator, std::basic_string<char>::const_iterator&)'
string::const_iterator b = s1.begin();
for (string::const_iterator iter = b;
iter != s1.end()-1; ++iter)
{
string s(b,iter);
...