好的,这是C ++中的一行
typedef vector<double>::size_type vec_sz;
据我所知,这行创建了一个名为vec_sz的别名。但我不明白为什么这里使用矢量???一般有typedef和vector。我试着找出整个晚上,但我仍然不明白。
答案 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
对应的typedefvector<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_type
是std::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 int
和vector<double>::size_type
可能会有所不同(尽管它们通常是相同的)。
所以引用的代码说“为C ++库的类型制作另一个typedef vector<char>::size_type
,用于包含double的向量中的元素数量。”