我有这样的代码,它从ifstream中调出一个参数,但我希望它从向量中获取:
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“转换成”向量“?
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;
}
}发布于 2022-04-18 14:52:00
是的,您可以将numbers的声明和第一个for循环替换为:
std::vector<T> numbers = data;
if ( bucket_size < data.size() )
numbers.resize( bucket_size );或
std::vector<T> numbers( data.begin(), data.begin() + std::min( data.size(), bucket_size ) );https://stackoverflow.com/questions/71913281
复制相似问题