std::list<SomeClass*> products[4];
// styleProducts, itemProducts, ... are defined before.
products[1] = styleProducts;
products[2] = itemProducts;
std::list<SomeClass*> allProducts; // so how to get all products ?
这里的代码非常简单,我可以使用迭代器将1,2个索引合并到一个列表中,但我的问题在于,这将是多达1000个产品列表,所以我怎么能得到所有!
我想合并此数组的所有索引以合并到一个列表中。
答案 0 :(得分:0)
如果我理解你的问题,可以使用方法.merge(otherlist)解决。
示例:
std::list<int> list1 = { 5,9,0,1,3 };
std::list<int> list2 = { 8,7,2,6,4 };
list1.sort();
list2.sort();
list1.merge(list2);
std::cout << "merged: " << list1 << "\n";
输出: 0 1 2 3 4 5 6 7 8 9
cppreference中的更多信息:http://en.cppreference.com/w/cpp/container/list/merge
编辑:
怎么样:
std::list<SomeClass*> allProducts;
for(int i=0; i<products.size(); ++i){
allProducts.merge(products[i]);
}
答案 1 :(得分:0)
尝试这样的事情:
std::vector< std::list<SomeClass*>* > products;
products.push_back(&styleProducts);
products.push_back(&itemProducts);
// etc...
std::list<SomeClass*> allProducts;
for (std::vector< std::list<SomeClass*>* >::iterator iter = products.begin(); iter != products.end(); ++iter) {
allProducts.merge(*iter);
}
可替换地:
#include <algorithm>
struct mergeWith
{
std::list<SomeClass*> &m_dest;
mergeWith(std::list<SomeClass*> &dest) : m_dest(dest) {}
void operator()(std::list<SomeClass*> *l)
{
m_dest.merge(*l);
}
};
std::vector< std::list<SomeClass*>* > products;
products.push_back(&styleProducts);
products.push_back(&itemProducts);
// etc...
std::list<SomeClass*> allProducts;
std::for_each(products.begin(), products.end(), mergeWith(allProducts));
如果您使用的是C ++ 11或更高版本:
std::vector< std::list<SomeClass*>* > products;
products.push_back(&styleProducts);
products.push_back(&itemProducts);
// etc...
std::list<SomeClass*> allProducts;
for (auto l: products) {
allProducts.merge(*l);
}
可替换地:
#include <algorithm>
std::vector< std::list<SomeClass*>* > products;
products.push_back(&styleProducts);
products.push_back(&itemProducts);
// etc...
std::list<SomeClass*> allProducts;
std::for_each(products.begin(), products.end(),
[&](std::list<SomeClass*> *l) { allProducts.merge(*l); }
);
// if you are using C++14 or later, you can replace
// "std::list<SomeClass*> *l" in the lambda with "auto l"...