【问题标题】:c++ , how to store string,int and float values into an array and retrieving back the stored valuesc++,如何将字符串、整数和浮点值存储到数组中并取回存储的值
【发布时间】:2012-10-06 21:11:47
【问题描述】:

一个数组是否可以同时存储intstringfloat?我一直在看到一些数组语法,但都以int array[]string array[] 开头,有没有一种方法可以让数组存储各种原始值和字符串值?

我对 C++ 不是很熟悉,但在 java 中有一个迭代器可以帮助您将这些存储的值滚动出来并允许您显示其中存储的内容。 C++ 也有这个特性吗?

【问题讨论】:

  • @amit,指针显然是可能的。我的经验表明,算法可能会变得非常困难(内存方面)。并且:RTTI 会很麻烦。
  • 我知道这并没有什么帮助,但你为什么需要这样做呢?拥有一个包含多种类型的数组可能会非常混乱。您能否尝试对您的解决方案进行不同的建模?
  • 使用 std::vector 比使用数组更符合习惯(且可维护)。
  • 对于它的价值,我怀疑一个课程会给你一个需要像这样的拳击类型的作业。你可能误解了一个需求。也许是多态性的机会?

标签: c++ arrays types


【解决方案1】:

如果这些值是相关的,则创建一个结构并存储它而不是单独的值。例如:

struct person {
    string name;
    int age;
};
person pArray[];

【讨论】:

  • 很好的答案,如果你不关心内存占用。您还可以添加类型标识符enum { IS_FLOAT, IS_STRING, ... } 以在运行时识别类型。
  • 他们如何知道使用哪个值? boost::optional 可能有帮助吗?
  • @RudolfMühlbauer:我认为他不是在推荐类似联合的东西,他实际上是在建议重新考虑将多个对象放入一个数组(作为一个对象)意味着什么
  • @MooingDuck 是的,我知道。您仍然可能有兴趣在运行时获取实际(内部)类型。我只是在建议,对我来说似乎是“下一步”。
【解决方案2】:

对于基本类型,这很容易:它们可以混合成unionhttp://www.cplusplus.com/doc/tutorial/other_data_types/ (->Unions)。

对于复杂的类型,例如string,它变得有点困难。

您可能想查看boost::varianthttp://www.boost.org/doc/libs/1_36_0/doc/html/variant.htmlboost::any http://www.boost.org/doc/libs/1_51_0/doc/html/any.html

【讨论】:

  • boost::variant 更可取,因为他们知道他们想要存储的所有类型?
  • C++ 现在允许在联合中使用非 POD 类型(使用 C++11)。 std::string 将起作用,但当然需要一些额外的工作才能正确管理联合成员对象的生命周期。 OTOH boost::variant 已经为您完成了所有工作。
  • @bames53 谢谢!不知道。从来没有绕过 C++11!多么可耻!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2015-02-08
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多