我想使用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方法进行整数实现?
答案 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);