c++ - 处理未知大小的输入

标签 c++

程序的输入由两部分组成。 输入第一行是元素个数,第二行是所有元素。这是一个示例输入:

5
1 3 23 4 2

有没有一种方法可以在不使用 std::string 并将其解析为 int vector 的情况下处理这种输入?

最佳答案

这听起来像是编程竞赛或其他类似的设置,您可以相信输入的格式正确。如果是这样的话,是的,您可以在不通过 std::string 缓冲的情况下执行此操作。这是一个选项:

std::size_t size;
std::cin >> size;

std::vector<int> values;
// Could do values.reserve(size); here if you'd like.

for (std::size_t i = 0; i < size; i++) {
    std::size_t value;
    std::cin >> value;

    values.push_back(value);
}

请注意,流提取运算符 operator >> 将使用任何空白字符作为分隔符,因此元素数量之后的换行符和数字本身之间的空格字符将作为分隔符发挥很好的作用。没有必要单独拉出整个第二行然后将其分开。

这不会进行错误检查,如果您不相信输入,这将是一个真正的问题。但如果可以的话,这应该可以解决问题。

关于c++ - 处理未知大小的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57700610/

相关文章:

c++ - 编译器强制语义类型

c++ - c++ 中字节的十六进制值到字符串(相当于 od -x 在 linux 中)?

c++ - 如何理解C++17标准引用中的[intro.object]/3?

c++ - 为特定方法调用关闭 C++ 中的静态类型检查

c++ - 为什么 std::move 对 std::unique_lock 没有任何影响?

c++ - 从排序数组中删除重复项,不同代码方式的相同解决方案具有不同的输出

c++ - 数组大小成员函数编译错误

c++ - QCache 和 QSharedPointer

c++ - 启动一个程序,该程序会选择一个特定的 Ubuntu iso 并从中启动

c++ - 使用 LinkedList 检查值