通过fstream函数初始化int向量? C ++

时间:2015-04-13 16:27:53

标签: c++ vector initialization fstream

我正在尝试使用整数向量来存储来自文本文件的未知数量的正整数。一般来说,我没有将数据推送到向量中的问题,但在这种情况下,当我尝试将一个整数从fstream推送到我的向量时,我遇到了编译错误。我可以使用动态数组或堆栈,但我坚持学习使用向量。我的代码如下:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

vector<size_t> nTxtToVec(string);

void main() {
    vector<size_t> allP = nTxtToVec("primes.txt");

    for (size_t i : allP)   // test all integers inside vector
        cout << i << ' ';

    cout << "\n\nPress any key to return...";
    cin.clear();
    cin.ignore(10000, '\n');
    return;
}

vector<size_t> nTxtToVec(string fin) {
    vector<size_t> v;
    size_t n = NULL;
    char c;

    fstream is;
    is.open(fin, ios::in);
    while (!is.eof()) {
        is.get(c);
        while (c >= '0' && c <= '9') {
            if (n == NULL)
                n = c - '0';
            else
                n = (n * 10) + (c - '0');
            is.get(c);
        }
        if (n != NULL) {
            v.push_back(n);
            n = NULL;
        }
    }
    is.close();
    return v;
}

使用此代码,我收到一个错误和一个警告:

error C2440: 'initializing' : cannot convert from 'std::vector<int,std::allocator<_Ty>>' to 'int'

 warning C4018: '<' : signed/unsigned mismatch

我用过&#34; size_t&#34;替换我所有的&#34; int&#34;数据类型尝试避免签名/无符号不匹配警告,但编译器说同样的事情,即使文本文件只包含正整数和空格。我也尝试在main()中初始化向量并将向量传递给void函数,而不是使用向量作为函数返回类型。我是C ++的新手,请原谅我,如果没有明显或愚蠢的做法。

1 个答案:

答案 0 :(得分:0)

除了while(!is.eof())之外的其他逻辑错误,如果您将void main()替换为int main()(根据C ++标准应该是这样),您的代码就会编译,并删除{来自return;的最后一行的{1}}。除非您想要返回与main()不同的内容(向操作系统发出异常程序错误信号),否则0中不需要return 0;,它会自动返回main()

Live example on ideone(g ++)或rextester.com(VC ++)