gpt4 book ai didi

c++ - vector 中的成员类型是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:00 26 4
gpt4 key购买 nike

当我在 cppreference.com 处通过 std::vector 时并找到一个名为“成员类型”的部分,我不明白那是什么意思。事实上,成员类型部分存在于STL 库中容器的所有引用文档中。

有人可以帮助我理解这一点吗?

最佳答案

成员类型定义了 vector 对象使用的类型。许多标准容器使用成员类型来描述所使用的类型,这样程序员就不需要手动弄清楚它们了。这在处理可能难以确定类型的复杂模板时特别有用。

例如 std::vector<___>::size() 的返回类型通常是 std::size_t ,但是另一个 C++ vector 实现可能会返回不同的整数类型(例如 int32_t )。无需假设您的代码中需要什么类型(并且可能引入危险的强制转换),您可以简单地使用 vector 公开的成员类型来每次都使用完美的类型编写您的代码。例如:

std::vector<int> vec;

const std::vector<int>::value_type val = 4;
// std::vector<int>::value_type is a typedef of int!

vec.push_back(val);

const std::vector<int>::size_type size = vec.size();
// std::vector<int>::size_type is a typedef of std::size_t, usually.

const std::size_t size2 = vec.size();
// same as above, but we assume that vec.size() returns a size_t.
// If it does not, we may cause a narrowing conversion!

for (std::vector<int>::const_iterator it = vec.begin(), end = vec.end(); it != end; ++it)
{
// The const_iterator type is also a member type of vector.
std::cout << *it << std::endl;
}

迭代器可能是标准容器中成员类型最常见的用法。不必弄清楚迭代器是随机访问迭代器、简单的前向迭代器还是任何其他类型的迭代器,我们可以只使用 iterator。容器公开的成员类型。

C++11 auto关键字可以更进一步。而不是做:

const std::vector<int>::size_type size = vec.size();

我们现在可以做:

const auto size = vec.size();

编译器会自动计算出来。

一般来说,大多数 C++ 标准对象将尽可能使用相同的成员类型(例如 size_t 用于 size_typeT 用于 value_typeT& 用于 reference_type),但不能保证( iterator 成员类型对于 std::vectorstd::list 是不同的,因为它们的实现截然不同并且它们不能使用相同的迭代器类型)。

关于c++ - vector 中的成员类型是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37714566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com