网站建设工作人员有哪些职责,网站收录提交工具,学编程的网课平台,手机网站建设套餐内容deque插入和删除
功能描述#xff1a; 向deque容器中插入和删除数据
函数原型#xff1a; 两端插入操作#xff1a;
push_back(elem); //在容器尾部添加一个数据
push_front(elem); //在容器头部插入一个数据
pop_back(); //删除容器最后一个数据
pop_front(); //删除容器…deque插入和删除
功能描述 向deque容器中插入和删除数据
函数原型 两端插入操作
push_back(elem); //在容器尾部添加一个数据
push_front(elem); //在容器头部插入一个数据
pop_back(); //删除容器最后一个数据
pop_front(); //删除容器第一个数据指定位置操作
insert(pos,elem); //在pos位置插入一个elem元素的拷贝返回新数据的位置。
insert(pos,n,elem); //在pos位置插入n个elem数据无返回值。
insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据无返回值。
clear(); //清空容器的所有数据
erase(beg,end); //删除[beg,end)区间的数据返回下一个数据的位置。
erase(pos); //删除pos位置的数据返回下一个数据的位置。#includeiostream
using namespace std;
#includedeque//deque容器插入和删除void printDeque(const dequeintd)
{for (dequeint::const_iterator it d.begin(); it ! d.end(); it){cout *it ;}cout endl;
}//两端操作
void test01()
{dequeintd1;//尾插d1.push_back(10);d1.push_back(20);//头插d1.push_front(30);d1.push_front(40);printDeque(d1);//尾删d1.pop_back();printDeque(d1);//头删d1.pop_front();printDeque(d1);
}void test02()
{dequeintd1;d1.push_back(10);d1.push_back(20);d1.push_front(30);d1.push_front(40);printDeque(d1);//insert插入d1.insert(d1.begin(), 80);printDeque(d1);d1.insert(d1.begin(),2, 90);printDeque(d1);//按照区间进行插入dequeintd2;d2.push_back(1);d2.push_back(2);d2.push_front(3);d1.insert(d1.begin(), d2.begin(), d2.end());printDeque(d1);
}void test03()
{dequeintd1;d1.push_back(10);d1.push_back(20);d1.push_front(30);d1.push_front(40);printDeque(d1);//删除dequeint::iterator it d1.begin();it;d1.erase(it);printDeque(d1);//按区间方式删除d1.erase(d1.begin(), d1.end());//d1.clear();printDeque(d1);
}int main()
{test01();cout endl;test02();cout endl;test03();return 0;
}这里有个坑需要避一下就是当重复执行d1.erase(it);后程序运行会崩溃。
崩溃的原因是在执行d1.erase(it)之后迭代器it失效了不能再继续使用。在C的STL中当执行erase操作后如果要继续使用迭代器进行遍历或删除元素需要重新获取合法的迭代器。因此连续两次执行d1.erase(it)会导致第二次的删除操作使用了一个已经无效的迭代器从而产生错误。 要解决这个问题可以在执行d1.erase(it)之后重新获取合法的迭代器再进行下一次的删除操作。以下是修改后的代码
// 删除
dequeint::iterator it d1.begin();
it;
d1.erase(it);// 重新获取合法的迭代器
it d1.begin();
it;
d1.erase(it);printDeque(d1);这样修改后就不会报错了。
总结 插入和删除提供的位置是迭代器 尾插-push_back 尾删-pop_back 头插-push_front 头删-pop_front
deque数据存取
功能描述 对deque中的数据的存取操作 函数原型
at(int idx); //返回索引idx所指的数据
operator[]; //返回索引idx所指的数据
front(); //返回容器中第一个数据元素
back(); //返回容器中最后一个数据元素#includeiostream
using namespace std;
#includedeque//deque容器数据存取void printDeque(const dequeintd)
{for (dequeint::const_iterator it d.begin(); it ! d.end(); it){cout *it ;}cout endl;
}void test01()
{dequeintd;d.push_back(10);d.push_back(20);d.push_back(30);d.push_front(40);d.push_front(50);d.push_front(60);//通过[]方式访问元素for (int i 0; i d.size(); i){cout d[i] ;}cout endl;//通过at方式访问元素for (int i 0; i d.size(); i){cout d.at(i) ;}cout endl;cout 第一个元素为 d.front() endl;cout 最后一个元素 d.back() endl;
}int main()
{test01();return 0;
}总结 除了用迭代器获取deque容器中元素[]和at也可以 front返回容器第一个元素 back返回容器最后一个元素
deque排序
功能描述 利用算法实现对deque容器进行排序 算法
sort(iterator beg,iterator end) //对beg和end区间内元素进行排序#includeiostream
using namespace std;
#includedeque
#includealgorithm#includevector//deque容器排序void printDeque(const dequeintd)
{for (dequeint::const_iterator it d.begin(); it ! d.end(); it){cout *it ;}cout endl;
}void test01()
{dequeintd;d.push_back(10);d.push_back(20);d.push_back(30);d.push_front(40);d.push_front(50);d.push_front(60);printDeque(d);//排序dequeint::iterator it1 d.begin();it1;dequeint::iterator it2 d.end();--it2;cout 排序后 endl;sort(it1, it2);printDeque(d);cout vector排序 endl;vectorintv;v.push_back(5);v.push_back(2);v.push_back(4);v.push_back(7);sort(v.begin(), v.end());for (vectorint::const_iterator it v.begin(); it ! v.end(); it){cout *it ;}cout endl;
}int main()
{test01();return 0;
}对于支持随机访问的迭代器的容器都可以利用sort算法直接对其进行排序vector容器也可以利用sort进行排序。