如何从对象中获取stl容器的类型
How to get the type of stl container from object?
如何从对象中获取STL容器的类型?例如,我有一个container
变量,我知道它是std::vector<some type>
。我需要使用迭代器对容器进行迭代。有没有一种方法可以在不知道容器类型的情况下声明迭代器?
当然,我可以从代码中获得类型,但我很好奇不使用类型就可以做到这一点。此外,我没有使用C++11。
C++11有一些很好的简单方法:
auto it = container.begin();
或者等效地:
decltype(container.begin()) it = container.begin();
甚至:
decltype(container)::iterator it = container.begin();
尽管如此,即使您不能使用类型推导,也不应该处于无法以某种形式(可能涉及模板参数(键入类型的情况。如果编译器知道它是什么类型,那么你也知道。
typedef std::vector<some_type> container;
for(container::const_iterator i = container.begin(); i != container.end(); ++i)
// ...
您还有迭代器typedef(可以使用它来代替const_iterator(。如果您使用的是c++11,请使用auto或for(auto& value: container) { ... }
形式。
从类型中获取
container::value_type.
对于关联容器;container::mapped_type
(container::value_type对应于对(。它是根据C++标准的第23章。
使用boost::is_same比较类型
从对象实例获取:
auto it = container.begin();
一种方法是使用模板:
template <class container>
void dosomething(container &c) {
typename container::iterator it = c.begin();
typename container::iterator end = c.end();
while (it != end)
dosomething_with(*it);
}
根据具体情况,auto
也可能有用:
for (auto it = container.begin(); it != container.end(); ++it)
dosomething_with(*it);
后者需要C++11,但前者在C++98/03中可用。
相关文章:
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 检查函数返回类型是否与STL容器类型值相同
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- 具有 STL 向量类型成员的类的复制内存
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- STL 函数和函数类型与函数指针类型
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
- 在 stl 容器包装器中定义迭代器类型
- 可以在 stl 容器上完成非类型模板参数吗?
- 模板化函数以从输入参数推断返回类型 stl-container
- 如何处理使用不同类型索引的不同库(例如 stl 和 eigen3)的混合(size_t、int、..)
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 如何在 STL 容器中存储具有抽象模板类型的抽象模板化类?
- 在C 中,对Pair类STL的用途是什么,就像数据类型或容器一样
- 指针类型上的 STL 函数对象
- STL 迭代器继承:"value_type"不命名类型
- 在 stl 中迭代结构类型的队列
- STL C 中不同类型的列表声明的错误
- 如何断言模板参数的类型 STL 迭代器类型