我的以下代码可以编译,但我不知道如何在不使用 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/