假设m
的类型为map<int, string>
,我们会遇到对
copy(m.begin(), m.end(), back_inserter(x))
。
我们可以对x的类型说些什么?
如果copy(m.begin(), m.end(), back_inserter(x))
是leagal,请举个例子。感谢
答案 0 :(得分:2)
我们可以对x的类型说些什么呢?
我们可以这样说:
m.value_type
为pair<const int, string>
,因此可能属于x.value_type
(不是严格要求,但在STL中是常规的)。x.push_back(value_type)
必须有效,才能使back_inserter(x)
生效。也就是说,x
的唯一要求是它支持以下内容:
x.push_back(pair<const int, string>());
这个函数实际上做了什么并不重要,但它必须具有此名称并支持此参数类型。
答案 1 :(得分:1)
谢谢大家!这是我的例子
map<int, string> m; // 'm' is associative container with type map<int, string>
m[1] = "Serge";
m[2] = "Iulia";
// 'back_inserter(x))' can be used for the container, so 'x' is a vector of pair
vector < pair<int, string> > x;
copy(m.begin(), m.end(), back_inserter(x));
// display vector of pair 'x'
cout << "vector <pair<int, string> > x" << endl;
for (vector<pair<int, string> >::const_iterator iter = x.begin(); iter != x.end(); ++iter) {
cout << iter->first << " " << iter->second << endl;
}
答案 2 :(得分:0)
x必须是容器类型。 back_inserter
返回一个迭代器,用于将元素添加到作为参数传递的容器的末尾。请参阅std::back_inserter。
back_inserter
对std::map
不合法。作为参数提供的容器类型必须支持push_back
所不具备的std::map
。要亲眼看看:http://ideone.com/b2t2iN