gpt4 book ai didi

c++ - 迭代成对容器中的成对元素 (C++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:04 26 4
gpt4 key购买 nike

如果我有一个容器(vectorlist 等),其中每个元素都是一个 std::pair,是否有一个简单的方法迭代每对的每个元素的方法?

std::vector<std::pair<int,int> > a;
a.push_back(std::pair(1,3));
a.push_back(std::pair(2,3));
a.push_back(std::pair(4,2));
a.push_back(std::pair(5,2));
a.push_back(std::pair(1,5));

然后能够迭代值:1,3,2,3,4,2,5,2,1,5?

类似地,什么类型的仿函数/函数会返回一个容器(相同类型),其中包含上述对元素的平面列表?

最佳答案

首先,您必须创建自己的迭代器类,它将指示对内位置的标志与 container<pair> 配对。迭代器

对于第二个,它更容易,尽管要像你想要的那样通用(相同类型的容器)你需要一个 template typedef .这里只是 vector :

template <class V>
std::vector<V> flatten_pairs(std::vector<std::pair<V,V> > const& a) {
typedef std::vector<std::pair<V,V> > A;
std::vector<V> ret;
for (typename A::const_iterator i=a.begin(),e=a.end();i!=e;++i) {
ret.push_back(i->first);
ret.push_back(i->second);
}
return ret;
}

这是伪造模板 typedef 的方法:

template <class C>
struct same_container;

template <class V>
struct same_container<std::vector<V> > {
template <class W> struct rebind { typedef std::vector<W> type; };
};

template <class V>
struct same_list<std::list<V> > {
template <class W> struct rebind { typedef std::list<W> type; };
};

template <class C>
typename same_container<C>::rebind<typename C::value_type::first_type>::type
flatten_pairs(C const& a);

关于c++ - 迭代成对容器中的成对元素 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1821858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com