c++ - 有没有办法从对列表中获取列表,有效地将列表分成两个在 C++ 中
问题描述
是否可以将一对列表拆分为两个单独的列表?
我的列表:
std::list<std::pair<Shape*, std::string>> listOfShapes;
所以我想从 listOfShapes 中得到一个字符串列表,但不使用任何 for 循环。
谢谢 :)
解决方案
你可以这样做(未经测试,但可编译):
#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));
推荐阅读
- python - 通过 Gmail API 发送回复
- linux - 在无限循环中逐行读取文件直到中断
- python - 使用字典基于旧列创建新列
- neo4j - 如何设计图形来处理 Neo4j 中的多向关系
- swift - 我想快速摆脱 for 循环
- wordpress - 通过rest api按类别获取帖子-wordpress和vuejs
- java - 无法通过 Swing Java 中的按钮将键侦听器添加到我的号码转移应用程序的班次号码
- node.js - push 在 mongoose/mongodb 数组中不起作用
- sql-server - 如何使用 Python 从 SQL 服务器 bcp 到文本文件
- python - 具有两种随机效应的混合模型 - statsmodels