gpt4 book ai didi

c++ - 用 std::istream_iterator 限制 std::copy 的范围

转载 作者:IT老高 更新时间:2023-10-28 21:35:13 24 4
gpt4 key购买 nike

我构建了一个最小的工作示例来展示我在使用 STL 迭代器时遇到的问题。我正在使用 istream_iteratorstd::istream:

读取 floatss(或其他类型)
#include <iostream>
#include <iterator>
#include <algorithm>

int main() {
float values[4];
std::copy(std::istream_iterator<float>(std::cin), std::istream_iterator<float>(), values);
std::cout << "Read exactly 4 floats" << std::endl; // Not true!
}

这会读取所有可能的 floatss,直到 EOF 进入 values,它的大小是固定的,4,所以现在显然我想限制范围以避免溢出和准确/最多读取 4 个值。

使用更多“正常”迭代器(即 RandomAccessIterator),前提是 begin+4 不会超过您要执行的操作:

std::copy(begin, begin+4, out);

准确读取 4 个元素。

如何使用 std::istream_iterator 做到这一点?显而易见的想法是将对 std::copy 的调用更改为:

std::copy(std::istream_iterator<float>(std::cin), std::istream_iterator<float>(std::cin)+4, values);

但是(可以预见)这不能编译,没有 operator+ 的候选者:

g++ -Wall -Wextra test.cc
test.cc: In function ‘int main()’:
test.cc:7: error: no match for ‘operator+’ in ‘std::istream_iterator<float, char, std::char_traits<char>, long int>(((std::basic_istream<char, std::char_traits<char> >&)(& std::cin))) + 4’

有什么建议吗?是否有正确的“STLified” pre-C++0x 方法来实现这一目标?显然,我可以将它写成一个 for 循环,但我希望在这里学习一些关于 STL 的知识。我有点想知道滥用 std::transformstd::merge 等以某种方式实现此功能,但我不太明白该怎么做。

最佳答案

看看std::copy_n

关于c++ - 用 std::istream_iterator 限制 std::copy 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com