📜  如何在大小未知时输入向量 - C++ (1)

📅  最后修改于: 2023-12-03 15:38:39.453000             🧑  作者: Mango

如何在大小未知时输入向量 - C++

在编写程序时,有时需要动态输入一个向量,但向量的大小未知。这时我们不能直接使用数组来接收输入。下面介绍几种方法来输入大小未知的向量。

方法一:使用std::vector容器

使用std::vector容器可以动态地存储元素并自适应大小,方便易用。首先引入头文件,然后定义一个空的std::vector,使用push_back方法向其中添加元素,直到输入结束。下面是示例代码:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> v; // 定义一个空的vector容器
    int x;
    while (cin >> x) // 循环输入元素
        v.push_back(x); // 将元素添加到vector中

    // 输出vector中的元素
    for (int i = 0; i < v.size(); ++i)
        cout << v[i] << " ";
    cout << endl;

    return 0;
}

以上代码中,cin会循环读取输入的元素,直到输入结束。然后使用push_back方法将元素添加到vector中。最后输出vector中的元素。该方法的时间复杂度为O(N),其中N为输入元素个数。

方法二:使用动态分配数组

除了使用std::vector容器,还可以使用动态分配数组来存储元素。通过new运算符动态分配数组,然后输入元素,直到输入结束。下面是示例代码:

#include <iostream>
using namespace std;

int main()
{
    int* arr = new int[100]; // 动态分配数组,初始大小为100
    int n = 0;
    while (cin >> arr[n]) // 循环输入元素
        ++n;

    // 输出数组中的元素
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
    cout << endl;

    delete[] arr; // 释放动态分配的数组

    return 0;
}

以上代码中,使用new运算符动态分配大小为100的int型数组arr,然后循环输入元素,直到输入结束。最后输出数组中的元素。该方法的时间复杂度为O(N),其中N为输入元素个数。

方法三:使用std::istream_iterator

使用std::istream_iterator可以将输入流视为迭代器,从而将输入的元素序列作为STL算法的输入。首先引入头文件,然后使用std::istream_iterator将输入流包装成迭代器,再把迭代器作为参数传递给std::vector容器或其他STL容器。下面是示例代码:

#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
    vector<int> v; // 定义一个空的vector容器

    // 使用istream_iterator包装输入流,传递给vector容器
    vector<int> v2(istream_iterator<int>(cin), istream_iterator<int>());

    // 输出vector容器中的元素
    for (int i = 0; i < v2.size(); ++i)
        cout << v2[i] << " ";
    cout << endl;

    return 0;
}

以上代码中,使用std::istream_iterator包装输入流cin,并将其传递给std::vector容器v2。最后输出vector中的元素。该方法的时间复杂度为O(N),其中N为输入元素个数。

综上所述,以上三种方法都可以动态地输入大小未知的向量。如果需要对向量进行快速访问和修改,则应使用std::vector容器。如果只是需要临时存储输入的元素,可以使用动态分配数组。如果需要将输入的元素作为STL算法的输入或者需要使用迭代器进行高效访问,则应使用std::istream_iterator。