有人能解释一下这条线吗?

时间:2011-11-07 20:59:00

标签: c++ vector typedef

好的,这是C ++中的一行

typedef vector<double>::size_type vec_sz;

据我所知,这行创建了一个名为vec_sz的别名。但我不明白为什么这里使用矢量???一般有typedef和vector。我试着找出整个晚上,但我仍然不明白。

5 个答案:

答案 0 :(得分:2)

vec_sz现在是用于表示vector(几乎总是size_t)大小的数据类型的别名。因此,假设您想索引向量中的元素,您可以使用vec_sz,如下所示:

for(vector<double>::size_type i = 0; i < some_vector.size(); ++i)
{
...
}

(感谢typedef)现在相当于:

for(vec_sz i = 0; i < some_vector.size(); ++i)
{
...
}

您可能想知道,“为什么要使用vec_sz?为什么我不应该只使用int?”。嗯,这使您的代码更具可移植性,并且不太可能依赖于您的假设(这可能是错误的)。

当然,最好通过iterators访问向量中的元素。

答案 1 :(得分:2)

类可以在其中包含typedef:

class foo {
public:
  typedef int bar;
}

foo::bar my_int; // same as int my_int;

Vector有一个与size_t

对应的typedef
vector<double>::size_type my_int; // roughly the same as size_t my_int
                                  // implementation may not use size_t

这很多打字,所以你可以再次输入它来缩短线条:

typedef vector<double>::size_type vec_sz;
vec_sz my_int; // same as vector<double>::size_type my_int; which is the same as size_t my_int;

答案 2 :(得分:1)

每个vector-class(在你的例子中为vector)定义了一些名为size_type的无符号整数类型。像这样:

template<class T> vector {
  typedef size_t size_type;
  ...
}

答案 3 :(得分:0)

它是std :: vector类中用于存储大小的类型。在许多平台和操作系统上,这可能会有所不同,使用此类型可确保您正确读取其大小。

例如,可以使用int作为其大小类型。但是,如果向量的大小类型是unsigned int,当向量超过最大signed int大小时,可能会发生奇怪的结果。

其他信息可在http://en.wikipedia.org/wiki/C_data_types找到 如您所见,int保证至少有16个字节,这可能因操作系统而异。

答案 4 :(得分:0)

size_typestd::vector<double>成员typedef

namespace std {
    template <typename T> class vector {
    public:
        typedef __something size_type;
        size_type size() const;
    // ...
    };
}

标准避免指定诸如“vector<T>::size()的返回类型为unsigned int之类的内容,以防实现可以支持向量中的更多元素,而不是{{1}的最大值。相反,它指定了一些实现定义的成员类型,因此库可以使用最有意义的任何类型,用户代码可以轻松使用该类型。

此外,unsigned intvector<double>::size_type可能会有所不同(尽管它们通常是相同的)。

所以引用的代码说“为C ++库的类型制作另一个typedef vector<char>::size_type,用于包含double的向量中的元素数量。”