c++ - back_inserter(容器)的类型是什么

标签 c++ types

我的以下代码可以编译,但我不知道如何在不使用 decltype 的情况下编写它。我已在使用 decltype 的行下方的注释行中写下了失败的尝试。

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

using namespace std;

template<class Out>
class Fill{
public:
  Fill(){}
  void fill(Out x){
    for(int i = 0; i != 10; i++)*x++ = i;
  }
};

int main(){
  vector<int> v;

  Fill<decltype(back_inserter(v))> f; //works

  //does not work
  //Fill<vector<int>::iterator> g;

  //does not work
  //Fill<back_insert_iterator<vector<int>> h;


  f.fill(back_inserter(v));
  copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
}

谢谢

苏雷什

最佳答案

类型为 back_insert_iterater<vector<int> > 。您的第三个示例不起作用,因为您需要在“>>”之间有一个空格。请参阅http://www.cplusplus.com/reference/std/iterator/back_insert_iterator/ ,它只是保存一个指向容器类型的指针,并将operator=重新定义为container.push_back。我相信这是存在的,以便标准容器可以与标准算法一起工作。但是,由于您可以控制 Fill 的定义,因此您可以简单地允许 Fill 类保存容器指针并直接针对容器调用 Push_back。

关于c++ - back_inserter(容器)的类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169848/

相关文章:

c++ - 我能以某种巧妙的方式将 union 初始化为函数参数吗?

javascript - typescript 、Firebase、 Cordova : Cannot find module for 'firebase'

c++ - 我可以使用 std::vector 使用额外的默认参数初始化元素吗?

影响 "HAS-A Parent"的 C++ 状态机

c++ - 运算符 << 和继承

Haskell:约束中的非类型变量参数?

types - 在 Clojure 中,为什么有字符串、关键字和符号?

c++ - 函数指针语法

c++ - C++ 中有 128 位整数吗?

c - 解释这个 gcc 函数的类型化行为