如何修改不同类型列表中的元素
How to modify elements in lists of different types?
如何使用stl算法有效地修改这两个列表的元素:
std::list<std::pair<double, string> > listPair(10);
std::list<double> listA(10);
以这样的方式,第一对元素从listA中获得相应的双值?
这里我假设listPair
已经被填充,因为否则无法获得该字符串。
您可以直接循环浏览集合。
auto a_cur = listA.begin(), a_end = listA.end();
auto pair_cur = listPair.begin();
for (; a_cur != a_end; ++ a_cur, ++ pair_cur) {
pair_cur->first = *a_cur;
}
或者使用std::transform
的"二进制"版本,但这将涉及复制字符串:
std::transform(listA.begin(), listA.end(), listPair.begin(), listPair.begin(),
[](double a, std::pair<double, string> b) {
return std::make_pair(a, b.second);
});
尝试使用C++11 lambdas
#include <algorithm>
#include <list>
#include <string>
#include <utility>
int main()
{
std::list<std::pair<double, std::string> > listPair(10);
std::list<double> listA(10);
// original question: assign double of listA to listPair
std::transform(
listA.begin(), listA.end(), listPair.begin(), listPair.begin(),
[](double d, std::pair<double, std::string> const& p) {
return std::make_pair(d, p.second);
}
);
// other way around: assign double from listPair to listA
std::transform(
listPair.begin(), listPair.end(), back_inserter(listA),
[](std::pair<double, std::string> const& p) {
return p.first;
}
);
return 0;
}
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用简单类型列表实现的指数编译时间.为什么
- 使用"auto"推断嵌套初始值设定项列表的类型
- 没有函数模板的实例"max"与参数列表参数类型匹配(int、int)
- C++ constexpr 列表及其类型的大小
- 如何使用 c++ 模型填充播放列表 qml 类型
- QML自定义列表数据类型
- 可变模板和初始值设定项列表的类型缩小差异
- 为什么我的初始值设定项列表在类型推断中被半忽略?
- 从类型为"<大括号括起来的初始值设定项列表>"的类型非常量引用的无效初始化
- std::函数参数列表和类型定义
- 初始值设定项列表引用类型安全
- 为什么只有一个元素的支撑init列表的类型会切换到元素本身的类型
- 如何获取系统调用的参数列表及其类型
- 数组中初始化列表的类型是什么C++
- 编译器的大括号初始值设定项列表与类型"std::initializer_list"的耦合程度如何?
- 自动初始化列表的类型
- 使用模板从类型列表提升类型
- 八度值列表数据类型
- c++列表没有类型错误