C++ 在std::vector中插入迭代器范围

C++ 在std::vector中插入迭代器范围,c++,C++,我有一个多重集,我从中得到一个范围。我想将这个范围添加到一个向量中,以便以后使用,这就是我要做的: class foo { public: int a; foo(int a) : a(a){} }; class FooPointerCompare { public: bool operator()(const foo* a, const foo* b) { return a->a <

我有一个多重集,我从中得到一个范围。我想将这个范围添加到一个向量中,以便以后使用,这就是我要做的:

class foo
{
    public:
        int a;
        foo(int a) : a(a){}
};
class FooPointerCompare
{
    public:
        bool operator()(const foo* a, const foo* b)
        {
            return a->a < b->a;
        }
};

std::multiset<foo*, FooPointerCompare> m;
std::vector<std::multiset<foo*, FooPointerCompare>::iterator> v;
auto pair = m.equal_range(new foo(5)); //leak here, I know
v.insert(v.end(), pair.first, pair.second);
class-foo
{
公众:
INTA;
foo(inta):a(a){}
};
类FooPointerCompare
{
公众:
布尔运算符()(常量foo*a,常量foo*b)
{
返回a->aa;
}
};
std::多集m;
std::向量v;
自动配对=m.equal_范围(新的foo(5))//我知道,在这儿漏
v、 插入(v.end(),第一对,第二对);
但我有以下错误:

No matching constructor for initialization of 'std::__1::__tree_const_iterator<foo *, const std::__1::__tree_node<foo *, void *> *, int>'

No viable overloaded '='
没有用于初始化“std::_1::_tree\u const\u迭代器”的匹配构造函数
没有可用的重载“=”
当我使用一个简单的
for(auto-it=pair.first;it!=pair.second;it++)v.push_-back(it)它工作得很好。我的
vector::insert
调用有什么问题?

有什么问题吗

v.insert(v.end(), pair.first, pair.second);
相当于

for (auto it = pair.first; it != pair.second; ++ it)
    v.push_back(*it);
//              ^

这和你的意图不一样。我不认为有任何标准算法可以满足你的要求。最好只写出for循环。

vector::insert
要求迭代器指向要插入到向量中的值

因为您有一个迭代器向量,所以必须向它传递在迭代器上迭代的内容。但是你要传递的是在你的多重集中元素上迭代的东西

因此,这与您无法执行的原因相同:

std::vector<char*> v;
char foo[10];
v.insert(v.end(), foo, foo+10);

顺便说一句,更容易编写
foof(5);自动配对=m.equal_范围(&f)比写
//泄漏在这里,我知道
-p@SteveJessop没错:P,在真正的代码中我使用了一个智能指针,但是对本地对象的引用听起来是一个更好的选择。啊,这很有道理!谢谢你的帮助。
std::vector<int> v;
v.insert(v.end(), 0, 10);
v.insert(v.end(),
    boost::make_counting_iterator(pair.first), 
    boost::make_counting_iterator(pair.second)
);