如果我有两个列表A和B,如何将B的所有元素添加到列表A的开头,而不是"清空" B列表。我基本上只想把B列表的副本转移到A列表的开头。我正在考虑使用insert并希望仔细检查语法。
我知道如果我将它添加到最后它将是:
A.insert(A.end(), B.begin(), B.end());
所以在开头插入它会是:
A.insert(A.begin(), B.begin(), B.end());
...
答案 0 :(得分:0)
制作要追加的列表的临时副本而不会清空,然后将临时列表拼接成原始列表。这是一个例子。
#include <iostream>
#include <list>
#include <vector>
int main ()
{
std::list<int> mylist;
std::list<int>::iterator it;
std::list<int> otherList;
std::list<int> combinedList;
// set some initial values:
for (int i=1; i<=5; ++i) mylist.push_back(i); // 1 2 3 4 5
for (int i=6; i<=10; i++) otherList.push_back(i); // 6 7 8 9 10
std::list<int> temp = otherList;
combinedList = mylist;
it = combinedList.begin();
combinedList.splice(it, temp);
std::cout << "mylist contains:";
for (it=combinedList.begin(); it!=combinedList.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
std::cout<<"orignal appended list:"<<std::endl;
for(it=otherList.begin(); it!=otherList.end(); ++it)
std::cout<<' '<<*it;
std::cout<<'\n';
return 0;
}
答案 1 :(得分:0)
这可以用一行实现,使用列表可以双向迭代的事实。
copy(A.rbegin(), A.rend(), front_inserter(B));
完整示例(列表构造函数和打印代码C++11
,但答案为C++03
有效):
#include <list>
#include <iterator>
#include <algorithm>
#include <iostream>
int main() {
// Create lists
std::list<char> A = {'a','b'};
std::list<char> B = {'c','d'};
// Insert A at the beginning of B
copy(A.rbegin(), A.rend(), front_inserter(B));
// Print result
for(auto c : B)
std::cout << c;
std::cout << "\n";
return 0;
}