c ++将txt值存储到vector <int>的快速方法

时间:2016-04-21 16:43:07

标签: c++

我想使用c ++将我的文本值存储到我的int向量中。

我的文字值是: 250 251 251 252 ......

如果我的文字值是char(例如) AFV ATD AGG .....

然后我会用

vector<std::string> arr;
std::string path = "C:\\myText.txt";
glob(path,arr,false);

但对于文本文件中的整数值,上面的代码无法实现。

因此我实现了以下代码:

vector<int> arr;
ifstream stream("C:\\myText.txt");
int num;
while(getline(stream,line)){
    istringstream(line) >> num;
    arr.push_back(num);
}

我的问题是:有没有更快的方法来实现上述代码?

使用glob方法进行整数实现?

2 个答案:

答案 0 :(得分:3)

这可能不会更快,但代码行数更少,并且不依赖于为每一行构建istringstream std::strign。由于可以从迭代器范围构造向量,因此我们可以使用从ifstream对象构造的istream_iterator和用于标记文件末尾的默认构造

std::ifstream fin("test.txt");
std::vector<int> data{ std::istream_iterator<int>(fin), std::istream_iterator<int>() };

这将读取文件中的整数并将它们直接插入到矢量中。我不确定使用push_back是否会减少内存分配。

答案 1 :(得分:1)

  

我的文字值是:250 251 251 252 ......

     

如果我的文本值是char(例如)afv atd agg .....

在这两种情况下,您都可以省略getline()istringstream

template<typename T> 
void glob(std::istream& is,std::vector<T>& arr) {
    T val;
    while(is >> val) {
        arr.push_back(num);
    }
}

使用它像:

ifstream stream("C:\\myText.txt"); // myText.txt contains all numbers like 250 251 251 ...
std::vector<int> v;
glob(stream,v);

ifstream stream("C:\\myText.txt"); // myText.txt contains all words like afv atd agg ...
std::vector<std::string> v;
glob(stream,v);