c++顺序容器操作

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操作解释一个可选的元素值参数,用来初始化添加到容器中元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值