如何在不输入n的情况下输入数组中的元素?(c++)
How to input elements in an array WITHOUT inputting n? (c++)
输入:5
long long n;
cin>>n;
long long a[n];
for(long long i=0;i<n;i++){
cin>>a[i];
}
如何在不输入n
的情况下输入数组的元素?
这就是我要找的:
输入:1,2,3,4,5
cout << a[0]
输出:
1
C++中的标准输入过滤器循环是while(cin >> a)
-它将读取,直到没有更多输入,或者发生其他不好的事情:
#include <vector>
#include <iterator>
#include <iostream>
int main() {
std::vector<int> nums;
while (std::cin >> a) {
nums.push_back(a);
}
std::copy(nums.begin(), nums.end(), ostream_iterator<int>{cout, " "});
}
您还可以使用一个带有输入迭代器的单行——读取矢量中元素的最短方法:
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> nums(std::istream_iterator<int>(std::cin), {});
std::copy(nums.begin(), nums.end(), std::ostream_iterator<int>{std::cout, " "});
}
参见此处的Ideone示例
然而,假设你希望忽略所有这些C++的敬畏,强烈劝阻IMHO,你可以:
#include <iostream>
int main() {
const int MAX_SIZE = 100;
int nums[MAX_SIZE];
int a;
int i=0;
while (std::cin >> a) {
nums[i++] = a;
}
// do your output
}
请注意:
- 需要猜测CCD_ 3
- 或者在读取的元素多于MAX_SIZE时手动处理重新分配
因此:使用std::vector
请改用std::vector<long long> a;
。
然后使用long long temp;
、cin >> temp;
和a.push_back(temp);
。
这意味着矢量将随着添加更多数据而自动增长。从某种意义上说,有更聪明的方式,但我的方式具有清晰的优势。
现在,酷猫们不担心重复的push_back
,因为他们相信C++标准库实现可以为您保持良好的内存。但如果必须这样做,那么std::vector
确实允许您通过其reserve
方法设置初始容量:如果您愿意,您仍然可以将向量增长到该容量之外。
您需要知道输入的结束位置。在您的情况下,看起来输入适合一行。您可以读取该行,从中构建字符串流,并从中读取逗号分隔的项目,如下所示:
string line;
getline(cin, line);
istringstream iss(line);
vector<long long> a;
long long tmp;
while (iss >> tmp) {
a.push_back(tmp);
iss.ignore(1, ',');
}
演示。
请注意上面是如何使用std::vector<long long>
而不是数组的。这种方法允许您通过简单调用push_back
来管理数据的存储,并通过检查size()
来知道您输入了多少数据。
有几种方法。最重要的是,如果你不知道值的数量,你需要使用一个可以根据需要增长的容器。为此,你有std::vector
(其他人已经提到过(。
使用矢量并读取输入的天真方法类似于
std::vector<int> vector;
while (!std::cin.eof())
{
int value;
std::cin >> value;
vector.push_back(value);
}
但是上面的循环是错误的!
使用与上述循环类似的方法(但有效(将类似于
std::vector<int> vector;
int value;
while (std::cin >> value)
{
vector.push_back(value);
}
然而,C++有许多不错的实用程序函数和类,可以使它变得更简单。
使用标准算法函数std::copy
和一些迭代器助手(std::istream_iterator
和std::back_inserter
(,我们可以编写
std::vector<int> vector;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(vector));
正如paul-g所指出的,它可以更简单,因为有一个向量构造函数重载占用迭代器范围,所以真正需要的只是
std::vector<int> vector(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>());
尝试使用指针数组(更通用的动态分配数组元素的方法(:
#include <iostream>
using namespace std;
int main()
{
int *Arr[1000],i=0,sizeofArr=0;
while(1){
Arr[i] = new int;
cin >> *Arr[i];
if(cin.get() == 'n'){ //exit the loop if ENTER is pressed
break;
}
i++;
sizeofArr++;
}
for (int j=0;j<=sizeofArr;j++){
cout << *Arr[j] <<" ";
}
return 0;
}
- C++如何通过用户输入删除列表元素
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 如何输入数组的元素,每次获得新元素时,我们将其放在数组的中间?
- 将包含多个元素的字符串作为输入并转换为矢量 C++
- 如何计算字符串中用户输入元素的出现次数?
- 在数组中显示第一个元素用户输入
- Qt,操作缓慢时不要冻结GUI输入元素
- 函数返回包含输入容器的特定元素的容器
- 如何让用户C++输入少于 10 个元素的数组
- 如何将输入到具有未知数量元素的数组中?
- 与 C++ 中一行中的用户输入数组元素相关的问题
- 数组元素的用户输入
- C 中的动态数组(用指针表示) - 输入元素
- C 中结构的输入元素
- 如何使用用户输入正确修改 2D 数组中的字符数组元素?专门用于电影院座位
- 根据另一个数组的元素输入,而无需复制
- 如何更新最近在 std::vector<pair<int, int>> 中输入的元素?
- 使用递归方法的类,使用int矢量元素作为输入
- 输入元素与文件C 的输出元素不同