📅  最后修改于: 2023-12-03 15:38:39.453000             🧑  作者: Mango
在编写程序时,有时需要动态输入一个向量,但向量的大小未知。这时我们不能直接使用数组来接收输入。下面介绍几种方法来输入大小未知的向量。
使用std::vector容器可以动态地存储元素并自适应大小,方便易用。首先引入头文件
#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可以将输入流视为迭代器,从而将输入的元素序列作为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。