本文主要是介绍OJ输入的坑---不定长数组的输入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上次遇到这个问题,没有放在心上,今天又遇到了,决定把这个坑给埋了。。。
不定长数组的输入问题
举个例子吧
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
如果输入一个不定长的数组,当遇到换行表示数组输入结束,但是牛客网的输入是多组数据循环输入的,我决定把数组用完就清空,然后再输入。。。
关于vector的清空函数
- clean()函数只清空元素,但是不回收空间
- erase()循环删除,不回收空间
- 使用swap,清除元素并回收内存
用法:vector().swap(str)或 str.swap(vector()) ;
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;vector<int> GetSmallestNum(vector<int> str, int k)
{vector<int> res;if (str.empty() || k > str.size()){return res;}sort(str.begin(), str.end());for (int i = 0; i < k; i++){res.push_back(str[i]);}return res;
}int main()
{int num;vector<int> str;while (str.empty()){while (1){cin >> num;str.push_back(num);if (cin.get() == '\n')//如果是回车符则跳出循环break;}int k;cin >> k;vector<int> ret = GetSmallestNum(str, k);for (int i = 0; i < ret.size(); i++){cout << ret[i] << " ";}cout << endl;vector<int>().swap(str);//清空数组}system("pause");return 0;
}
如果还有其他好用的方法,欢迎评论
这篇关于OJ输入的坑---不定长数组的输入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!