C++ 使用istream_迭代器范围构造时无法访问向量
C++ 使用istream_迭代器范围构造时无法访问向量,c++,stl,most-vexing-parse,C++,Stl,Most Vexing Parse,我试图编译此代码段,但遇到编译器错误:(!使用Visual Studio 2010编译 #include <vector> #include <string> #include <sstream> #include <iterator> #include <iostream> using namespace std; int main() { string s( "Well well on" ); istringst
我试图编译此代码段,但遇到编译器错误:(!使用Visual Studio 2010编译
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
#include <iostream>
using namespace std;
int main() {
string s( "Well well on" );
istringstream in( s );
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
copy( v.begin(), v.end(), ostream_iterator<string>( cout, "\n" ) );
}
发生了什么?向量构造正确,我怎么能不能调用它
致以最良好的祝愿,我想
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
向量v(istream_迭代器(in),istream_迭代器());
被解析为函数声明:
vector<string> v( istream_iterator<string> in, istream_iterator<string> );
vector v(istream\u迭代器in,istream\u迭代器);
这通常被称为
我想多加几个括号就能解决这个问题:
vector<string> v( (istream_iterator<string>(in)), (istream_iterator<string>()) );
向量v((istream_迭代器(in)),(istream_迭代器());
> p>这是所谓的例子。它是许多C++程序员的一大难题。 基本上,这段代码并不是你认为的意思:
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
解析器认为以下行是在声明函数:
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
向量v(istream_迭代器(in),istream_迭代器());
将main更改为此,它将编译:
int main()
{
string s( "Well well on" );
istringstream in( s );
istream_iterator<string> start = istream_iterator<string>(in);
vector<string> v(start, istream_iterator<string>());
copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}
intmain()
{
字符串s(“开得好”);
istringstream(s);
istream_迭代器开始=istream_迭代器(in);
向量v(开始,istream_迭代器());
复制(v.begin(),v.end(),ostream_迭代器(cout,“\n”);
}
你应该在“有效的STL”上查“最终的C++图书指南和列表”,特别是感谢很多SBI,问题解决了^!“最令人烦恼的解析”,我会记住这个名字!谢谢约翰,我真的很喜欢你的解决方案;)陈:谢谢。有多种方法可以解决此问题。你在这里看到了三个。我真的想不出任何其他的解决办法。C++是我学到的最复杂的语言:(谢谢扎克的另一种解决方案);
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
int main()
{
string s( "Well well on" );
istringstream in( s );
istream_iterator<string> start = istream_iterator<string>(in);
vector<string> v(start, istream_iterator<string>());
copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}