功能:从终端输入一串数字序列,空格分隔,赋值给vector<int>容器
方法1.换行符结束--需使用getline进行字符串转换整数处理,使用字符串流处理函数(stringstream)
代码:
#include <iostream>
#include <vector>
#include <string>
#include<sstream>//要包含这个才能用stringstream
using namespace std;
// 重载输入运算符,以换行符作为结束标志
istream& operator>>(istream& input, vector<int>& vec) {
string line;
getline(input, line); // 读取一行输入
istringstream iss(line); // 使用字符串流来解析整数
int num;
while (iss >> num) { // 从字符串流中读取整数
vec.push_back(num); // 将读取的整数添加到向量中
}
return input; // 返回输入流
}
int main() {
vector<int> myVec;
cout << "Enter integers separated by spaces (换行结束): ";
cin >> myVec; // 使用重载的输入运算符读取整数到向量中
// 输出向量中的整数
cout << "You entered: ";
for (int num : myVec) {
cout << num << " ";
}
cout << std::endl;
return 0;
}
运行:
运行结果
Enter integers separated by spaces (换行结束): 12 3 4 6 7 8
You entered: 12 3 4 6 7 8
方法2.Ctrl+D结束--只有输入Ctrl+D才是标准EOF,换行会被当做输入,一直在循环中
代码:
#include<iostream>
#include<vector>
using namespace std;
void printfvector(vector<int> v)
{
//cout << "整数向量容器的长度为" << v.size() << endl;
cout << "整数向量容器的内容为";
for (int it : v)
cout << it << " ";
}
istream &operator>> (istream& in,vector<int>& v)
{
int num;
while (in >> num) { // 循环读取输入流中的整数
v.push_back(num); // 将读取的整数添加到向量中
}
return in; // 返回输入流
}
int main()
{
vector<int> t;
cout << "输入数字序列:";
cin >> t;
printfvector(t);
}
运行:
输入数字序列:1 2 3 4 5 6 7 ^D(这里按ctrl+D表示输入流的结束)
整数向量容器的内容为1 2 3 4 5 6 7
在 Unix/Linux 系统上,Ctrl+D
被用作表示输入流结束的符号,通常被称为 EOF(End of File)。当你在终端输入内容时,按下 Ctrl+D
会告诉程序你已经输入完毕,这对于标准输入流是很有用的。
在 C++ 中,当你使用 cin
从标准输入流(通常是键盘)读取数据时,Ctrl+D
表示输入结束。这是因为 cin
会等待输入流结束或者遇到错误才会停止读取。在终端中,Ctrl+D
表示你已经输入完毕,因此 cin
会停止读取数据并继续执行程序。
标签:num,Ctrl,整数,vector,变长,include,输入,终端 From: https://www.cnblogs.com/mingyuer/p/18241136