- list: 可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以在前后双向迭代。
1. 常见构造
- constructor
- 构造空的list;
- 构造list中包含n个值;
- 用[begin, end]左闭右开的区间构造;
- 以数组为迭代器区间构造。
void test()
{
list<int> lst;
list<char> lst2;
list<int> lst3(3, 5);
string str = "123456";
list<char> lst4(str.begin(), str.end());
char arr[] = "abcd";
list<char> lst5(arr, arr + sizeof(arr) / sizeof(arr[0]));
}
2. 迭代器
- begin / end :返回第一个元素/最后一个元素的末尾的迭代器
- rbegin / rend :返回第一个元素的reverse_iterator,即end位置,返回最后一个元素末尾的reverse_iterator,即begin位置。
void test()
{
string str = "1234567";
list<char> lst(str.begin(), str.end());
list<char>::iterator it = lst.begin();
while (it != lst.end())
{
cout << *it << " ";
*it = 'a';
++it;
}
cout << endl;
list<char>::const_iterator cit = lst.cbegin();
while (cit != lst.cend())
{
cout << *cit << " ";
++cit;
}
cout << endl;
list<char> lst2(str.begin(), str.end());
list<char>::reverse_iterator rit = lst2.rbegin();
while (rit != lst2.rend())
{
cout << *rit << " ";
*rit = 'c';
++rit;
}
cout << endl;
list<char> lst3(str.begin(), str.end());
list<char>::const_reverse_iterator crit = lst3.crend();
--crit;
while (crit != lst3.crbegin())
{
cout << *crit << " ";
--crit;
}
cout << *crit << endl;
for (auto& e : lst3)
{
cout << e << " ";
e = 'c';
}
cout << endl;
for (const auto& e : lst3)
{
cout << e << " ";
}
cout << endl;
}
3. 修改操作
void test()
{
list<int> lst;
lst.push_front(1);
lst.push_back(2);
lst.insert(lst.begin(), 0);
list<int>::iterator it = lst.begin();
cout << *it << endl;
lst.insert(lst.end(), 0);
lst.emplace(lst.begin(), -1);
lst.emplace_back(4);
lst.emplace_front(-2);
list<int> copy = lst;
lst.insert(lst.end(), copy.begin(), copy.end());
for (const auto& e : lst)
{
cout << e << " ";
}
cout << endl;
cout << *it << endl;
it = lst.erase(it);
cout << *it << endl;
lst.resize(4,100);
for (const auto& e : lst)
{
cout << e << " ";
}
cout << endl;
lst.resize(6, 100);
for (const auto& e : lst)
{
cout << e << " ";
}
cout << endl;
}
4. Operations
template<class T>
void printList(const list<T>& lst)
{
for (const auto& e : lst)
{
cout << e << " ";
}
cout << endl;
}
bool compareList(const int& a, const int& b)
{
return a > b;
}
void test()
{
string s = "123";
string s2 = "abc";
list<char> lst(s.begin(), s.end());
list<char> lst2(s2.begin(), s2.end());
lst.splice(lst.begin(), lst2, ++lst2.begin(), lst2.end());
printList(lst);
printList(lst2);
lst.remove('b');
printList(lst);
lst.push_back('1');
lst.push_back('2');
lst.push_back('3');
lst.push_back('a');
lst.push_back('b');
printList(lst);
lst.unique();
printList(lst);
lst.sort(compareList);
printList(lst);
lst.unique();
printList(lst);
}
void test2()
{
int arr[] = { 10,2,5,3,6 };
int arr2[] = { 23,5,36,7,8 };
list<int> lst(arr, arr + 5);
list<int> lst2(arr2, arr2 + 5);
lst.sort();
lst2.sort();
lst.merge(lst2);
printList(lst);
}