首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++将txt值存储到vector<int>中的快速方法

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

Stack Overflow用户
提问于 2016-04-21 16:43:06
回答 2查看 105关注 0票数 0

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

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

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

那我就用

代码语言:javascript
运行
复制
vector<std::string> arr;
std::string path = "C:\\myText.txt";
glob(path,arr,false);

但是对于文本文件中的整数值,上述代码不可能实现。

因此,我实现了以下代码:

代码语言:javascript
运行
复制
vector<int> arr;
ifstream stream("C:\\myText.txt");
int num;
while(getline(stream,line)){
    istringstream(line) >> num;
    arr.push_back(num);
}

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

类似于使用glob方法来实现整数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 17:11:29

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

代码语言:javascript
运行
复制
std::ifstream fin("test.txt");
std::vector<int> data{ std::istream_iterator<int>(fin), std::istream_iterator<int>() };

这将从文件中读取整数,并将它们直接插入到向量中。我不确定这是否会比使用push_back更少地分配内存。

票数 3
EN

Stack Overflow用户

发布于 2016-04-21 17:15:49

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

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

代码语言:javascript
运行
复制
template<typename T> 
void glob(std::istream& is,std::vector<T>& arr) {
    T val;
    while(is >> val) {
        arr.push_back(num);
    }
}

用它就像:

代码语言:javascript
运行
复制
ifstream stream("C:\\myText.txt"); // myText.txt contains all numbers like 250 251 251 ...
std::vector<int> v;
glob(stream,v);

代码语言:javascript
运行
复制
ifstream stream("C:\\myText.txt"); // myText.txt contains all words like afv atd agg ...
std::vector<std::string> v;
glob(stream,v);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36775822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档