将固定数量的元素从输入流复制到矢量中
Copying a fixed number of elements from an input stream into a vector
给定以下程序:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
unsigned n;
vector<double> xvec;
cin >> n;
while (xvec.size() < n)
{
double x;
cin >> x;
xvec.push_back(x);
}
return 0;
}
有没有办法使用 STL 编写它而无需显式 while 循环(例如,使用 copy() 算法和插入器?
当在运行时读取元素数量时,我还没有找到一种方法来做到这一点(如这里的变量"n")。
以下是将
n
double
s 复制到向量的一种方法:
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
unsigned n;
std::vector<double> xvec;
std::cin >> n;
xvec.reserve(n);
std:generate_n(std::back_inserter(xvec), n,
[]() { double d; std::cin >> d; return d; });
std::copy(xvec.begin(), xvec.end(),
std::ostream_iterator<double>(std::cout, " "));
std::cout << "n";
return 0;
}
注意:这种使用 std::copy_n
的替代方法不起作用:
std::copy_n(std::istream_iterator<double>(std::cin),
n,
std::back_inserter(xvec));
这实际上读取n+1
元素,但只复制其中n
个元素(至少在 g++ 4.6.3 上)。
注2:将答案限制为C++98,这里有一个可能的解决方案:
double GetD() { double d; std::cin >> d; return d; }
...
std:generate_n(std::back_inserter(xvec), n, GetD);
相关文章:
- 如何忽略输入流中的某些字符?
- 复制文件流C++静态变量
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- C++输入流.与 cin unget() 函数有点混淆
- 从输入流中读取行,并能够跳过块
- 使用 Visual Studio 代码读取 C++ 中的输入流时出错
- 处理输入流运算符>>中的无效输入
- 树莓派上的端口音频,找不到输入流的设备
- 使用 strncpy 复制 tcp 流会导致故障吗?
- boost::asio 以async_read复制输入数据
- 如何将C++输入流分隔符包含在结果令牌中
- 如果两个输入流相等,我如何构造主()到输出是
- 使用非成员函数从输入流中提取类对象
- CIN是否将输入流中的无效字符取用
- 动态内存分配和输入(流)运算符C++
- 计算输入流中值的出现次数
- (C++) 学习向量 - 编码/输入流终止/比较向量的问题
- 为什么输入流无法识别 Ctrl D 并给出无限循环
- 将固定数量的元素从输入流复制到矢量中
- 方便地将 std::vector<unsigned char> 复制到输入流 (std::istream) 对象