gpt4 book ai didi

c++ - OutputIterator 从 std::copy 返回

转载 作者:行者123 更新时间:2023-11-27 22:57:58 25 4
gpt4 key购买 nike

函数模板 std::copy 的等价物是:

template<class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
while (first!=last) {
*result = *first;
++result; ++first;
}
return result;
}

在这段代码中使用:

int * n = new int[3]{1,2,3};
int * m = new int[3]{4,5,6};
std::vector<int> asd;

std::copy(n,n+1,std::insert_iterator<std::vector<int>>(asd,asd.begin()));

据我了解:我注意到的一件事是:OutputIterator模板的返回类型基于拷贝的第三个参数。在这种情况下,std::insert_iterator将返回 std::vector<int>这也将是 std::copy 的返回类型

我的问题

OutputIterator 是什么时候?已收到?代码已被启动:

std::copy(n,n+1,std::insert_iterator<std::vector<int>>(asd,asd.begin()))

所以当函数结束时,它不应该返回与第三个参数相同的类型即std::vector<int>吗? ?

如有指正,将不胜感激。

最佳答案

返回的迭代器指的是刚好超出复制的目标范围的末尾。在反向插入迭代器的情况下,它也将是一个 back_insert_iterator,因此写入它会将一个元素添加到目标集合的末尾。

例如,代码如下:

#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>

int main() {
std::vector<int> s{ 1, 2, 3 };
std::vector<int> d;

auto i = std::back_inserter(d);

i = std::copy(s.begin(), s.end(), i);
*i = 5;

std::copy(d.begin(), d.end(), std::ostream_iterator<int>(std::cout, "\t"));
}

应该产生以下输出:

1       2       3       5

标准类型的官方措辞假设类似于随机访问迭代器 (§25.3.1/2):

Returns: result + (last - first)

...其中 result 是作为目标传递的迭代器,first 是源范围的开始,last 是源范围的末尾。

关于c++ - OutputIterator 从 std::copy 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697861/

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