如何声明vector :: size_type的向量?

时间:2016-04-07 17:57:47

标签: c++ stl c++14

我想要一个矢量,其元素的类型为vector :: size_type

但是,您无法声明:

vector<vector::size_type> aVec;

因为size_type是模板本身的一部分,所以你必须使用类型本身,我需要这样的东西:

vector<vector<T>::size_type> aVec;

但T应该是什么?这真的是一个循环问题。 :)

如果vector刚刚使用size_t作为其大小类型(但没有一个特殊的typedef用于size_type,可能会根据向量所持有的类型而变化),我可以这样做:

vector<size_t> aVec;

但是,事实并非如此。我怀疑它有一个合理的理由允许它变化,但是通过让它成为模板化矢量类的一部分而不是在它之外而使它变得困难。

思想?

3 个答案:

答案 0 :(得分:1)

std::vector<>::size_typestd::size_t类型的静态成员类型,因此std::vector<std::size_t> vec

应该是安全的

答案 1 :(得分:1)

为什么不使用vector<vector<int>::size_type> myVector;?如果你从未在其他任何地方使用类型vector<int>,那么它不会花费任何费用,因为模板实例在某种程度上是懒惰的。您可以使用除int以外的任何其他类型。

vector<T>::size_typevector<T'>::size_type不同。

答案 2 :(得分:1)

(我在这里重写答案,这次没有对标准做出任何声明。)

您可以为该类型(可以是std::size_tstd::vector<void*>::size_type)进行最佳猜测,并在事后进行检查。

std::vector<std::size_t> Avec;
static_assert(std::is_same<decltype(Avec)::size_type, decltype(Avec)::value_type>(), "bad guess");