1. 输入不定数组(这个是我目前笔试中最大的痛,浪费了超多时间)
方法1,输入回车就终止:用vector的push_back()加 while((value=cin.get())!=('\n'))
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int sum=0,value=0;
vector<int>test;
char c;
while((c=cin.get())!=('\n'))//cin.get()读取字符变量,不能直接把它读给int 型的value,需借用一个char型的c取进行判断
{
cin.unget(); //如果读入的不是回车,把该流倒回去一位
cin>>value; //重新读给int型的value
test.push_back(value);
}
for(int i=0;i<test.size();++i){
sum+=test[i];
}
cout<<sum;
return 0;
}
输入多行,以回车分界
#include<iostream>
using namespace std;
int main(){
int a,sum=0;
char num;
while(num=cin.get()){
if(num!='\n'){
cin.unget();
cin>>a;
sum+=a;
}
else{
cout<<sum<<endl;
sum=0;
}
}
return 0;
}
方法2,输入非int型字符终止:while(cin>>value)
其中cin对于空格、回车等空白字符是忽略的,不能及时终止 ,只有当输入为非int型的字符才会终止 ;
可用std::noskipws 此处的std::noskipws表示的是不忽略任何地方的空白(包括制表符和空格等)
如:while (cin >> std::noskipws >> cval)
而 get()函数它以回车结束,遇空格不结束 。
PS:
1. 至于遍历,直接用迭代器即可
vector<int>::iterator it;
for (it=test.begin();it!=test.end();it++)
cout<<*it<<endl;
//这里的it就相当于一个指针,
//.begin(): 返回一个当前vector容器中起始元素的迭代器
//.end(): 返回一个当前vector容器中末尾元素的迭代器
2. 输入多组元素:如
第一组是3个数字,分别是:2,2,1。
第二组是11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。
思路:利用两重while,重复利用vector
int N,n;
vector<int>res;
while(cin>>N) //多组数据
{
res.clear(); //清除上一组数据的影响
while(N--)
{
cin>>n;
res.push_back(n);
}
for (set<int>::iterator it = res.begin(); it != res.end(); it++)
{
cout << *it << endl;
}
}