首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将从ifstream读取的数据转换为vector<T>

如何将从ifstream读取的数据转换为vector<T>
EN

Stack Overflow用户
提问于 2022-04-18 14:43:09
回答 1查看 74关注 0票数 0

我有这样的代码,它从ifstream中调出一个参数,但我希望它从向量中获取:

代码语言:javascript
复制
    void WriteBucket(std::ifstream &input_file, uint64_t bucket_size, size_t bucket_number) {
    std::vector<double> numbers;
    for (size_t i = 0; i < bucket_size && input_file; ++i) {
        double current_number;
        input_file >> current_number;
        if (input_file) {
            numbers.push_back(current_number);
        }
    }

    sort(numbers.begin(), numbers.end());
    std::ofstream output_file("intermediate_output_" + std::to_string(bucket_number));
    for (double number: numbers) {
        output_file << number << std::endl;
    }
}

我试着把它从向量和类型T中提取出来,但是结果最终不起作用:是否有可能更好地将读取从"ifstream“转换成”向量“?

代码语言:javascript
复制
    template<typename T>
static void WriteBucket(vector<T> &data, uint64_t bucket_size, size_t bucket_number) {

    std::vector<T> numbers;
    //   for (auto i = 0; i < bucket_size && !data.empty(); ++i) {
    for (size_t i = 0; i < bucket_size; ++i) {
        T current_number;
        current_number = data[i];
        if (!data.empty()) {
            numbers.push_back(current_number);
        }
    }
    sort(numbers.begin(), numbers.end());
    std::ofstream zwischen_ausgabe("intermediate_output_" + std::to_string(bucket_number));
    for (auto i = 0; i < numbers.size() - 1; ++i) {
        zwischen_ausgabe << numbers[i] << std::endl;
    }

}
EN

回答 1

Stack Overflow用户

发布于 2022-04-18 14:52:00

是的,您可以将numbers的声明和第一个for循环替换为:

代码语言:javascript
复制
std::vector<T> numbers = data; 
if ( bucket_size < data.size() ) 
    numbers.resize( bucket_size );

代码语言:javascript
复制
std::vector<T> numbers( data.begin(), data.begin() + std::min( data.size(), bucket_size ) );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71913281

复制
相关文章

相似问题

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