vector与cin
时间: 2025-04-06 21:02:14 浏览: 23
### C++ 中 `vector` 与 `cin` 的交互
在 C++ 编程中,`std::vector` 是一种动态数组容器,能够存储任意数量的元素并支持动态扩展。虽然可以直接通过 `cin` 对单个变量赋值,但由于 `vector` 存储的是多个元素,因此需要借助循环或其他方式逐一读取数据。
#### 基本原理
当使用 `cin` 向 `vector` 输入数据时,通常会先初始化一个固定大小的 `vector` 或者逐步向其中添加元素。以下是两种常见的实现方法:
1. **预先分配空间**
预先设定好 `vector` 的大小,然后逐一遍历其元素并通过引用对其进行修改。
2. **动态增加元素**
利用 `push_back()` 方法,在运行过程中不断向 `vector` 添加新元素。
---
### 示例代码:预设大小的 `vector`
如果已知要输入的数据量,则可以提前设置 `vector` 的容量,并利用范围基循环(range-based loop)完成输入操作。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers(5); // 创建一个包含5个整数的 vector,默认初始值为0
cout << "请输入5个整数:" << endl;
for (int& num : numbers) { // 范围基循环,num 是对 vector 元素的引用
cin >> num; // 将用户输入赋值给当前元素
}
cout << "您输入的数字如下:" << endl;
for (const int& num : numbers) { // 输出所有元素
cout << num << " ";
}
cout << endl;
return 0;
}
```
上述程序创建了一个长度为 5 的 `vector`,随后提示用户依次输入五个整数值[^1]。
---
### 示例代码:动态增长的 `vector`
对于未知数量的输入情况,可采用动态调整的方式,即每次接收一个新的有效输入后将其加入到 `vector` 中。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers; // 动态大小的 vector
int temp; // 临时存储用户输入
cout << "连续输入若干整数,以负数结束:" << endl;
while (true) {
cin >> temp; // 接收输入
if (temp < 0) break; // 若遇到负数则停止录入
numbers.push_back(temp); // 否则将该正数存入 vector
}
cout << "您输入的有效数字如下:" << endl;
for (const int& num : numbers) { // 遍历输出所有合法输入
cout << num << " ";
}
cout << endl;
return 0;
}
```
此版本允许用户持续提供输入直到满足特定条件为止(例如输入负数作为终止标志)。每当接收到符合条件的新项时,都会调用 `push_back()` 来追加至现有集合之中[^2]。
---
### 多维 `vector` 的输入示例
除了简单的一维结构外,有时还需要处理更复杂的多维情形。比如下面的例子演示了如何构建以及填充三维矩阵形式的数据集。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main(){
const size_t rows = 3, cols = 4; // 设定行列数目
vector<vector<int>> matrix(rows, vector<int>(cols));
cout << "请按顺序填满" << rows * cols << "格子:" <<endl;
for(size_t i=0;i<rows;++i){
for(size_t j=0;j<cols;++j){
cin>>matrix[i][j]; // 访问第(i,j)位置处单元格
}
}
cout<<"最终得到的结果:"<<endl;
for(const auto &row:matrix){ // 打印整个二维表
for(int elem: row){
cout<<elem<<"\t";
}
cout<<endl;
}
return 0;
}
```
这里我们首先声明了一张由三行四列构成的大表格——每行为一个小列表;接着按照常规嵌套逻辑收集外部供给的信息流直至完全覆盖指定区域内的每一个角落[^3]。
---
### 注意事项
尽管标准库提供了方便快捷的操作接口供开发者快速上手实践各种功能模块开发工作流程当中去应用这些技术手段解决问题提高效率减少重复劳动强度等等好处多多不胜枚举...不过还是有一些地方需要注意避免踩坑哦!
- 当尝试访问尚未存在的索引位点之前记得确认边界合法性以免引发越界异常错误;
- 如果计划频繁执行插入删除动作建议考虑其他更适合此类场景需求的数据类型替代方案如链表之类的东西可能会更加高效合理一些吧?
---
阅读全文
相关推荐


















