我希望使用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方法来实现整数?
发布于 2016-04-21 17:11:29
这可能不是更快,但它的代码行较少,并且不依赖于从std::strign为每一行构建一个std::strign。由于可以从迭代器范围构造向量,所以我们可以使用从istream_iterator对象构造的ifstream对象和默认构造的向量来标记文件的结尾。
std::ifstream fin("test.txt");
std::vector<int> data{ std::istream_iterator<int>(fin), std::istream_iterator<int>() };这将从文件中读取整数,并将它们直接插入到向量中。我不确定这是否会比使用push_back更少地分配内存。
发布于 2016-04-21 17:15:49
我的文本值是: 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);https://stackoverflow.com/questions/36775822
复制相似问题