back_inserter(容器)的类型是什么?
what is the type of back_inserter(container)
我下面的代码编译,但我不知道如何写这没有使用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," "));
}
感谢suresh
类型为back_insert_iterater<vector<int> >
。你的第三个例子不工作,因为你需要一个空白之间的">>"。参见http://www.cplusplus.com/reference/std/iterator/back_insert_iterator/,它只是保存一个指向容器类型的指针,并将operator=重新定义为container.push_back。我相信这是为了让std容器可以与std算法一起工作。但是,由于您已经控制了Fill的定义,您可以简单地允许Fill类保存一个容器指针,并直接对容器调用push_back。
vector<int> ints;
typedef back_insert_iterator<vector<int>> InserterType; // This is what you need.
Fill<InserterType> f;
f.fill(back_inserter(ints));
copy(ints.begin(), ints.end(), ostream_iterator<int>(std::cout, "n"));
如果您使用c++0x,答案是:'auto':D
我发现我原来的帖子中的错误是我错过了h
定义中的第三个直角括号。应该更正为
Fill<back_insert_iterator<vector<int>>> h;
现在,代码将按预期编译和工作。
相关文章:
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 类名后跟括号的类型是什么
- std::chrono::duration::count函数的实际结果类型是什么
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- 指向 2D 数组的指针的类型是什么?
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- 共享_ptr中多功能数组的类型是什么
- 构造函数的类型是什么?
- 字符串中单个字符作为数组的数据类型是什么
- 该结构继承的类型是什么
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- C 中被视为可可的类型是什么
- 当函数采用右值引用时,函数中该变量的类型是什么?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- 模板类中引用的引用的类型是什么
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 包含通过引用捕获的 lambda 函数的"variable"的类型是什么?
- 通过插座发送的内容的数据类型是什么