终端输入变长vector的方法

功能:从终端输入一串数字序列,空格分隔,赋值给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 会停止读取数据并继续执行程序。

 

posted @ 2024-06-10 22:14  蔡姬小媛  阅读(65)  评论(0)    收藏  举报