- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
函数模板 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/
C++ 要求 OutputIterator 类型 X 支持 r++ 形式的表达式,其中 r 是 X。此后缀增量必须在语义上等同于: (*) { X tmp = r;++r;返回 tmp; } 并且必须
根据(优秀的)问题 C++ OutputIterator post-increment requirements ,我们观察到对于 OutputIterator 类型 X 的可取消引用和递增值 r,以
我在一篇关于 OutputIterator 的文章中读到,我们只能将其解引用为左值。我的问题是关于 operator++ 的,它将迭代器递增一个位置。 所以, *it++ = t 会是 {*it =
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。 我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名: temp
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。 我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名: temp
我正在玩概念并遇到障碍。或者也许只是我的思想被阻塞了。 我想创建一个缓冲“批量可读”数据源的类。这样的数据源应该有一个成员函数,该函数接受一个 OutputIterator 并具有如下签名: temp
我正在尝试编写一个接受 OutputIterator 并将值写入其中的 C++ 函数,但我遇到了各种问题。当我传入 list<> 迭代器时,列表未填充,当我传入 vector<> 迭代器时,出现段错误
第 1.3.2 节 here在 CGAL 文档中主张使用 OutputIterator 返回 convex_hull_2() 的结果,因为调用时容器为空,因此我们无法传递 result.begin()
函数模板 std::copy 的等价物是: template OutputIterator copy (InputIterator first, InputIterator last, Output
我正在使用 CGAL 的 Kd 树实现以及模糊球体作为查询对象,以获取以点为中心的半径为 r_max 的球体中包含的点。这是这个最小的工作示例: #include #include
我创建了一个简单的不可变双向迭代器: #include #include #include #include #include class my_iterator : public std:
我正在为自定义容器定义迭代器。迭代器实现了 InputIterator 和 OutputIterator 概念。 iterator::reference 和 const_iterator::refer
(此问题与 Why does std::max_element require a ForwardIterator? 具有相同的“问题模板”,但答案必须不同,因为 std::fill 不会将迭代器返回
我是一名优秀的程序员,十分优秀!