有人能给我解释一下这句台词吗?

Could someone explain me this line?

本文关键字:一下 解释      更新时间:2023-10-16

好的,这里有一行c++

typedef vector<double>::size_type vec_sz;

我明白,这一行创建了一个名为vec_sz的别名。但我不明白为什么这里用矢量??什么通用有typedef和vector。整个晚上我都想弄明白,可我还是不明白。

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呢?"好吧,这使你的代码更易于移植,更不容易依赖于你的假设(这可能是错误的)。

当然,通过迭代器访问vector中的元素更好。

类中可以有typedef:

class foo {
public:
  typedef int bar;
}
foo::bar my_int; // same as int my_int;

Vector有一个类型定义,对应于size_t

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;

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

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

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

例如,可以使用int作为其大小类型。但是,如果vector的size类型为unsigned int,则当vector超过最大signed int大小时,可能会出现奇怪的结果。

更多信息可在http://en.wikipedia.org/wiki/C_data_types上找到如您所见,int保证至少有16个字节,这在不同的操作系统中是不同的。

size_typestd::vector<double>成员类型。

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

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

同样,vector<double>::size_typevector<char>::size_type也可以是不同的(尽管它们通常是相同的)。

所以引用的代码说"为c++库中用于vector中包含double的元素数的类型创建另一个typedef vec_sz"。