通用容器&变量元素访问

时间:2013-02-19 11:47:52

标签: c++ vector

在我的变量数据中,当运行“添加变量”脚本代码时,如何为所有类型定义通用容器?访问它们的通用公式是什么?这很烦人,因为我必须为每种类型定义一个矢量模板(int float double等)。我的变量应该只包含一个通用的矢量对象,无论它是int,还是浮点数或双精度等等。有可能吗?有什么想法吗?

3 个答案:

答案 0 :(得分:0)

这是标准模板库 ..

的重点
std::vector<int>
std::vector<float>

两个向量 - 相同的类,用不同类型模板化。

如果您想要一个不同类型的容器,您可能需要查看std::tuple

答案 1 :(得分:0)

修改

哦,你想要一个适合任何类型的容器吗?是的你可以。但在某些限制范围内。

请参阅boost::anyboost::variantboost::variant可以在声明 boost::variant时保存枚举的几种类型的数据。 boost::any不会让您枚举您想要支持的所有类型,但是您需要将它们强制转换为自己获取值。

简而言之,您必须将类型信息存储在其他位置(使用boost::any时),或者仅支持几种类型(例如,支持intdouble的异构向量使用boost::variant


C ++中的

template完全无需为每种类型编写相同的类。 例如:

// function template
template <class T>
T GetMax (T a, T b) {
  T result;
  result = (a>b)? a : b;
  return (result);
}

GetMax应适用于具有>运算符的任何类型。所以这正是{C}中template的含义。

如果你需要更多关于在C ++上实现向量的帮助(顺便说一下,当涉及到具有自己的构造函数和析构函数的自定义类型时,这不是那么简单。你可能需要allocator才能获得 - 初始化空间),阅读本文(Implementation of Vector in C++)。

答案 2 :(得分:0)

如果您想要一个包含多种不同类型对象的向量,那么您可能希望使用boost::anyboost::variant