vector<int> vec;
//添加元素
cout << "=====================添加元素============================" << endl;
for (int i = 0; i < 10; i++)
{
vec.push_back(i);//在尾部添加
vec.emplace_back(i * 10);//在尾部添加
}
show(vec);
forward_list<int> forli;
for (int i = 0; i < 10; i++)
{
forli.push_front(i);//只能在头部添加,emplace_front、push_front只有forward_list有
forli.emplace_front(i*10);
}
show(forli);
vector<int> vec2{55,66,77,88,99};
vec.insert(vec.begin(), vec2.begin(), vec2.end());//在vec的一个指针前添加迭代器指向的一个范围的元素
show(vec);
list<int> li{1,2,3,4,5,6};
li.insert(li.begin(), 9);
show(li);
//删除元素
cout << "======================删除元素=========================" << endl;
vector<string> svec{ "aaa","bbb","ccc","ddd" };
show(svec);
svec.pop_back();//删除尾部元素
show(svec);
list<string> sli{ "eee","fff","ggg" };
sli.pop_front();//删除头部元素
show(sli);
svec.erase(svec.begin());//删除指定位置的元素
show(svec);
总结
forward_list 有特殊版本的 erase
forward_list 不支持 pop_back() ;
vector 和 string 不支持 pop_front() ;
删除 deque 中 除首尾之外 的任何元素都会使所有迭代器,引用和指针失效
指向vector 和string 中 删除点之后 的迭代器,引用,指针都会失效.
删除元素的成员函数并不会检查其参数! 在删除元素之前,请确保它们存在
pop_front 和 pop_back 成员函数返回void,若需要弹出的值! 必须在执行弹出操作前保存它!!! 使用 front() / back()
erase 函数返回的是 指向删除的 最后一个元素之后 位置的迭代器
clear 删除容器中所有元素,返回viod
forward_list是单链表,进行删除或插入的时候前节点会有改动
forward_list<int> lst{111,222, 333, 444, 555};
forward_list<int> lst2{ 999,888, 777, 666 };
int num(5);
int num2(1);
int count(10);
lst.before_begin(); // 返回指向链表首元素之前 不存在元素 的迭代器,不能解引用!
lst.cbefore_begin();
lst.insert_after(lst.before_begin(), num); // 在迭代器p之后 的位置插入元素,t是一个对象!!!
lst.insert_after(lst.begin() , 3, num2); // n 是数量
lst.insert_after(lst.before_begin(), lst2.begin(), lst2.end()); // 表示范围的一对迭代器
lst.insert_after(lst.before_begin(), {1111,2222,3333,4444,5555}); // il是一个花括号列表.
// 返回 一个指向最后一个插入的元素之后的迭代器
show(lst);
lst.emplace_after(lst.before_begin(), 7); // 使用args在p指定位置之后 创建一个元素.返回一个指向这个新元素的迭代器!
lst.erase_after(lst.begin()); // 删除p指向位置之后的元素!
//lst.erase_after(b,e); // 删除从b之后(不包含b)到e之间的元素!
// 返回 一个指向被删元素之后元素的迭代器!
show(lst);
cout << "=========================下标访问===================" << endl;
vector<string> ssvec{"ddd","fff","hhh","ttt","ppp"};
cout << ssvec.at(0) << " " << ssvec.at(2) << endl;
cout << ssvec[1] << endl;
cout << ssvec.back() << endl; // 返回c中尾元素的引用;
cout << ssvec.front() << endl; // 返回c中头元素的引用;
cout << "===========================改变容器大小=================" << endl;
list<int> silist(10,7);
silist.resize(15,6);
silist.resize(7);
//resize:如果当前大小大于所要求的大小,容器后部的元素会被删除;
//如果当前大小小于新大小,会将新元素添加到容器后部。
//resize操作解释一个可选的元素值参数,用来初始化添加到容器中元素。