說我有類似的具體項目:遍歷列表中的用C一對(或元組)++
using MyList = std::list<std::pair<string,int>>;
我怎樣才能獲取列表的迭代器只是字符串(或整數)?我有一個功能,我想通過東西 .begin()和東西 .end(),這只是整數。有沒有一個簡單/聰明/光滑的方式來做到這一點?它也可以用元組來完成嗎?
說我有類似的具體項目:遍歷列表中的用C一對(或元組)++
using MyList = std::list<std::pair<string,int>>;
我怎樣才能獲取列表的迭代器只是字符串(或整數)?我有一個功能,我想通過東西 .begin()和東西 .end(),這只是整數。有沒有一個簡單/聰明/光滑的方式來做到這一點?它也可以用元組來完成嗎?
有升壓的transform_iterator
。
using MyList = std::list<std::pair<string,int>>;
MyList l{ {"Hello", 42}, {"World", 0} };
auto tr = [](auto const& p){
return p.first;
};
copy(boost::make_transform_iterator(l.begin(), tr),
boost::make_transform_iterator(l.end(), tr),
ostream_iterator<string>(cout, ", "));
隨着range-v3,你可以做這樣的事情
std::list<std::pair<std::string, int>> pairs = {{"John", 2}, {"Hello", 42}};
auto names = pairs | ranges::view::keys;
auto ints = pairs | ranges::view::values;
auto doubleInts = pairs | ranges::view::transform([](const auto& p){ return 2 * p.second; };
我不知道是否有這樣做的標準方式,但你可以編寫自己的迭代器適配器。 – NathanOliver