- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我现在正在学习 C++ STL 迭代器,这里有一段代码教 back_insert_iterator :
int main(int argc, const char * argv[]) {
vector<int> original;
//vector<int> original = {100, 99, 98}; /* Initially empty */
/* Create a back_insert_iterator that inserts values into myVector. */
back_insert_iterator< vector<int> > itr(original);
for (int i = 0; i < 10; ++i) {
*itr = i + 1; // "Write" to the back_insert_iterator, appending the value.
++itr; }
vector<int> destination;
reverse_copy(original.begin(), original.end(),
back_insert_iterator< vector<int> >(destination));
reverse_copy(original.begin(), original.end(),
insert_iterator< vector<int> >(destination));
/* Print the vector contents; this displays 0 1 2 3 4 5 6 7 8 9 */ copy(destination.begin(), destination.end(), ostream_iterator<int>(cout, " "));
cout << endl;
然后我想把 back_insert_iterator 改成 insert_iterator 看看会发生什么,所以我替换了这行代码:
reverse_copy(original.begin(), original.end(),
back_insert_iterator< vector<int> >(destination));
使用以下代码:
reverse_copy(original.begin(), original.end(),
insert_iterator< vector<int> >(destination));
但是,我的 IDE 报告说“没有从‘vector’到‘insert_iterator< vector >’的函数式转换的匹配转换
我不明白为什么会这样,因为我认为 insert_iterator 应该是 back_insert_iterator 的“父类”迭代器,如果可以应用 back_insert_iterator,那么也可以类似地应用 insert_iterator?
最佳答案
迭代器适配器insert_iterator
只有下面的构造函数
insert_iterator(Container& x, typename Container::iterator i);
如您所见,它有两个参数,第二个参数设置容器中将插入新元素的位置。
所以你必须写
reverse_copy(original.begin(), original.end(),
insert_iterator< vector<int> >(destination, destination.end()));
迭代器适配器的赋值运算符
insert_iterator<Container>&
operator=(const typename Container::value_type& value);
执行以下操作
iter = container->insert(iter, value);
++iter;
那是它使用了容器的方法 insert
,而该方法又有两个参数。
与迭代器 front_insert_iterator
和 back_insert_iterator
相比的区别在于,对于这两个迭代器适配器,插入新元素的位置是已知的,而对于迭代器适配器 insert_iterator
必须自己指定插入的位置。
关于c++ - insert_iterator VS back_insert_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31532579/
对 STL 容器的哪些操作可以使引用该容器的 C++ std::insert_iterator 无效? insert_iterator 是否有效,前提是它的底层迭代器( protected 成员 it
我最近写了我的第一个自定义迭代器(耶!)它在容器(缓冲区)之上运行,目前是一个 std::vector 缓冲区,但至少在理论上应该与任何其他标准容器一起工作,可变长度字节编码数据。没有什么花哨。基本上
我尝试编写一个通用的、就地的、intersperse 函数。该函数应将给定元素散布到一系列元素中。 #include #include #include #include template v
我现在正在学习 C++ STL 迭代器,这里有一段代码教 back_insert_iterator : int main(int argc, const char * argv[]) { vector
我有一个需要模板化迭代器类型的函数。 它当前取消引用迭代器以检查被迭代的类型。 template void func( Iterator i ) { // Inspect the size of
在下面的代码中,我创建了一个不包含迭代器 header 的 insert_iterator。这怎么可能编译?我是 c/c++ 的新手,所以这可能会有一个令人生厌的解释。 #include //#in
在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数 template TOutputIter SplitSpace(std::istream& IS, TOutputIter r
我是一名优秀的程序员,十分优秀!