gpt4 book ai didi

c++ - 使用迭代器实现 STL vector 构造函数

转载 作者:行者123 更新时间:2023-12-03 10:05:15 34 4
gpt4 key购买 nike

我正在尝试用 C++98 实现 std::vector。
而且,我提到了 https://www.cplusplus.com/reference/vector/vector/vector/
因此,在构造函数中,我对 vector 进行了如下编码。

explicit vector (size_type n, const value_type& val = value_type(),
const allocator_type& alloc = allocator_type())
{
...
}

template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type())
{
...
}
但是,当我在 main 中测试该 vector 时,它并没有像我想要的那样工作。
int main(void)
{
vector<int> vec(3, 100);
}
我想打电话 explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()) ,但调用了带有迭代器的构造函数。
所以,我的问题是
  • 为什么调用带有迭代器的构造函数?这是因为“显式”而发生的吗?
  • 我应该在 main() 中使用 'size_t' 来调用带有 'val' 的构造函数吗?或者,有没有办法检查迭代器?

  • 很抱歉打扰你,但我真的不知道为什么会这样......

    最佳答案

    实现通常会使用某种类型特征来启用/禁用迭代器版本,具体取决于迭代器类型是否真的是迭代器。
    例如,它在概念上类似于:

    template <class InputIterator, typename = enable_if_t<IsIterator_v<InputIterator>>
    vector(InputIterator first, InputIteratorLast)
    (或更正确,以避免重新定义仅在默认模板参数中延迟的模板,如评论中所述和在此 notes :):
    // this is more the way it's actually practically implemented
    template <class InputIterator, enable_if_t<IsIterator_v<InputIterator>, int> = 0>
    vector(InputIterator first, InputIteratorLast)
    哪里 IsIterator_v是实现定义的 类型特征 用于测试迭代器需求。
    所以在你的构造函数示例中 vector(3, 100)迭代器构造函数版本将不参与重载决议。
    在 C++98 中有 enable_if ,而且实现也会使用类似的概念检查。

    关于c++ - 使用迭代器实现 STL vector 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65931743/

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