2012-10-04 145 views
0

我试图从ifstream中读取fin并使用istream_iterators将其放入矢量vec1。我见过这些东西所有的地方:istream_iterator初始化矢量

vector<int> vec1((istream_iterator<int>(fin)),istream_iterator<int>); 

我想保留供以后使用istream_iterators,所以我想:“这应该工作”:

istream_iterator<int> iit(fin); 
istream_iterator<int> eos; 
vector<int> vec1(iit,eos); 

...它没有按”牛逼的工作=(我的矢量是完全地空的(我从读取的文件是一个txt文件与只是个数字)

编辑:。的TXT如下所示:

06351784798452318596415234561 
6641321856006 
+0

有数字之间的间隔?如果没有,或者在第一个空白字符之前的第一个数字序列,则可能是数字大于最大整数值,并且它不会被读取。 – hmjd

+0

你能提供一个完整的,最小的例子以及确切的输入吗?有关更多详细信息,请参阅http://SSCCE.ORG。 –

回答

1

根据注释,第一个数字序列大于int的最大值,因此输入操作将失败,导致vector保持为空。

可以得到最大值int等使用std::numeric_limits模板:

std::cout << std::numeric_limits<int>::max() << "\n"; 
+0

谢谢!我试图用空格分隔数字,现在它工作正常! –

0

正如你可能想尝试在序列迭代马上看看是否有一些(可能不是)一个中间步骤:

while (iit != eos) { 
    std::cout << *iit++ << '\n'; 
} 

如果没有打印任何检查您的流处于良好初步建立:

if (!fin) { 
    std::cout << "file not opened!\n"; 
} 

如果流仅contaibs数字,没有空格它可能溢出和读取int只是失败的结果。

+0

我尝试迭代序列,但它是空的。我已经有了一个文件控制器。 –