如何在不输入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

原文由 Nson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 784
2 个回答

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++ 令人敬畏的东西,恕我直言,强烈建议您这样做,您可以:

 #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
}

请注意,您将:

  1. 需要猜测 MAX_SIZE
  2. 或在读取的元素超过 MAX_SIZE 后手动处理重新分配;

因此:使用 std::vector !!

原文由 paul-g 发布,翻译遵循 CC BY-SA 3.0 许可协议

请改用 std::vector<long long> a;

然后使用 long long temp;cin >> temp;a.push_back(temp);

这意味着向量将随着您添加更多数据而自动增长。从某种意义上说,有 更聪明 的方法,但我的方法具有 清晰 的优势。

这些天来,酷猫不再担心重复 push_back 因为他们相信 C++ 标准库实现可以为您保持良好和完整的内存。但是,如果您必须这样做,那么 std::vector 确实允许您通过其 reserve 方法设置初始 _容量_:如果您愿意,您仍然可以将您的向量增长到超出此范围。

原文由 Bathsheba 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏