首页 > 解决方案 > 有没有办法从对列表中获取列表,有效地将列表分成两个在 C++ 中

问题描述

是否可以将一对列表拆分为两个单独的列表?

我的列表:

std::list<std::pair<Shape*, std::string>> listOfShapes;

所以我想从 listOfShapes 中得到一个字符串列表,但不使用任何 for 循环。

谢谢 :)

标签: c++std

解决方案


你可以这样做(未经测试,但可编译):

#include <list>
#include <algorithm>
#include <string>

class Shape;
std::list<std::pair<Shape*, std::string>> listOfShapes;

std::list<Shape*> list1;
std::list<std::string> list2;

template<typename F, typename S>
class Split {
public:
    using value_type = std::pair<F, S>;
    Split(std::list<F> &f, std::list<S> &s) : f_(f), s_(s) {};
    void push_back(const std::pair<F, S>& value ) {
        f_.push_back(value.first);
        s_.push_back(value.second);
    }
private:
    std::list<F> &f_;
    std::list<S> &s_;
};

Split<Shape*, std::string> s(list1, list2);
auto e = std::copy(listOfShapes.begin(), listOfShapes.end(), std::back_insert_iterator<Split<Shape*, std::string> >(s));

推荐阅读