【问题标题】:How to input an array in C++? [closed]如何在 C++ 中输入一个数组? [关闭]
【发布时间】:2012-12-27 12:52:33
【问题描述】:

如何在 C++ 中输入一个数组?输入 - 2 3 56. 需要存入数组 A[0]=2, A[1]=3, A[2]=56?

【问题讨论】:

  • @chris 显然没有。

标签: c++ arrays string input


【解决方案1】:
vector<int> v;
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v));

或者如果你可以在构造向量的时候做到这一点,它只是一行(感谢@chris):

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());

【讨论】:

  • 副本是多余的。只需使用迭代器对其进行初始化。
  • 从技术上讲,这不是一个数组。
  • 好主意,我已经更新了。
  • 现在你有最烦人的解析:D 不久前发生在我身上 >.> 不,我没有想到我的第一条评论,所以我没有故意引诱你那个陷阱。
  • @chris:确实,尽管这种结构听起来很诱人,但写起来真的很尴尬。另外,我会因为默默地丢弃错误而感到难过,如果您没有使用整个输入,我可能想警告您。 (我认为在这种情况下可以很容易地添加类似cin &gt;&gt; ws; if (cin.get() != EOF) { /* warn */ } 的东西。
【解决方案2】:

back_inserter的那个更容易理解:

std::vector<int> V;
int Temp;

while (cin >> Temp)
    V.push_back(Temp);

请注意,我们没有使用静态分配的数组,因为您没有真正指定要读取多少个元素,在这种情况下,使用vector 通常会更好、更安全。

【讨论】:

  • 变量不能以大写字母开头。此外,我仍然觉得 OP 不一定要问vector
  • 变量不得以 CAPS 开头命名 请告诉我,@Boris,任何可靠来源都不允许或建议这样做;这与打开花括号完全一样 - 约定
  • 你很清楚,我可以将你转发给很多来源。但是,还有一个问题要问:如何将名为 VTemp 的类与变量区分开来?如果调用静态方法呢?
  • @BorisStrandjev 我使用C 前缀作为类名。
  • 习惯上为宏保留ALL_UPPERCASE,但这是我能想到的唯一原因,为什么我不以大写命名变量。不过,“不具名……”的措辞太强硬了,大​​写字符前跟一个下划线不一样,这是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
相关资源
最近更新 更多