郑州手机网站建设,广东省自然资源厅地址,天津住房城乡建设网站,php开发的培训网站建设目录
01_vector.cc
02_vector.cc
作业
01STL包括哪些组件#xff1f;各自具有哪些特点#xff1f;
02 序列式容器包括哪些#xff1f;他们之间有哪些异同#xff1f;
03 下面程序有什么错误#xff1f;
04 创建和初始化vector的方法#xff0c;每种都给出一个实例…目录
01_vector.cc
02_vector.cc
作业
01STL包括哪些组件各自具有哪些特点
02 序列式容器包括哪些他们之间有哪些异同
03 下面程序有什么错误
04 创建和初始化vector的方法每种都给出一个实例当然也可以把deque与list写出来
05 如果c1与c2是两个容器下面的比较操作有什么限制if(c1 c2)
06 STL中的std::deque容器的实现原理
07 评委打分的例子要求有五名选手ABCDE10个评委打分去掉最高分和最低分求出每个选手的平均分。
08 编程题从一个 vector 初始化一个 string。
09 题目使用vector打印九九乘法表。
01_vector.cc
#include iostream
#include vector
using std::cout;
using std::endl;
using std::vector;template class T
class vec{
public:
private:typedef T* _iterator;
};
void test(){/*1*/vectorint num0;/*2*/vectorint num1(10,5);//count same valueint arr[10]{0,1,2,3,4,5,6,7,8,9};/*3*/vectorint num2(arr,arr10);//[0,10)/*4*///copy move/*5*/vectorint num3{4,5,6,3,2,7,3,9};//-----------------------------------//vectorint::iterator itnum1.begin();//未初始化迭代器for(;it!num1.end();it){cout*it ;}coutendl;//-----------------------------------//for(size_t idx;idx!sizeof(arr)/sizeof(arr[0]);idx){coutnum1[idx] ;}coutendl;//-----------------------------------//for(auto ittnum2.begin();itt!num2.end();itt){cout*itt ;}coutendl;//-----------------------------------//for(auto ele: num3){coutele ;}coutendl;
}int main(void)
{test();return 0;
}02_vector.cc
#include iostream
#include vector
#include deque
#include list
using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;template typename Container
void display(const Container con){for(auto ele: con){coutele ;}coutendl;
}
void display_cap(const vectorint con){coutendl;display(con);coutsize::con.size()endl;coutcapacity::con.capacity()endl;
}//---------------------------------//
//vector 可变数组
template class T
class vec{
public:T* data(){return _M_start;}
private:T* _M_start; //第一个元素T* _M_finish; //最后一个元素的下一个位置T* _M_end_of_storage; //最后一个空间的下一个位置
};
//---------------------------------//
//deque 逻辑连续 物理存储分散
//中控器数组 Map -- 小片段(内部连续)
//迭代器不是一个普通类型的指针是一个类对指针的基本功能都做了重载
template class T
class _Tp{
private:_Tp* _M_cur;_Tp* _M_first;_Tp* _M_last;/* _Map_pointer _M_node; //和中控器联系 */
};
template class _Tp,class _Alloc
class _deque_base{
};
//---------------------------------//void test(){vectorint num3{4,5,6,7,8,9};display(num3);num3.push_back(333);display(num3);num3.pop_back();display(num3);//vector不支持头部插入和删除一端开口//效率——整体前移/后移coutvector first number addrendl;num3;//error _M_tartcout(*num3.begin())endl;cout(num3[0])endl;int *pdatanum3.data();coutpdataendl;vectorint::iterator v_itnum3.begin();v_it;v_it2;cout*v_it *v_itendl;num3.insert(v_it,11);//insert front ,return curdisplay_cap(num3);cout*v_it *v_itendl;/* num3.insert(v_it,10,222);//迭代器失效 invalid pointer */v_itnum3.begin();num3.insert(v_it,10,222);//迭代器失效 invalid pointerdisplay_cap(num3);cout*v_it *v_itendl;v_itnum3.begin();num3.insert(v_it,{666,777,888});display_cap(num3);cout*v_it *v_itendl;v_itnum3.begin();num3.insert(v_it,num3.begin(),num3.end());display_cap(num3);cout*v_it *v_itendl;//insert操作的时候会导致底层发生扩容操作//迭代器还指向老的空间老的空间已经回收了所以//迭代器失效了//解决每次都重新 置位 迭代器coutendlendl;//-----------------------------//listint num2{4,5,6,7,8,9};display(num2);num2.push_back(333);num2.push_front(44444);display(num2);num2.pop_back();num2.pop_front();display(num2);coutlist push anywhereendl;listint::iterator l_itnum2.begin();l_it;/* l_it2; */cout*l_it *l_itendl;num2.insert(l_it,11);//insert front ,return curdisplay(num2);cout*l_it *l_itendl;num2.insert(l_it,3,222);display(num2);cout*l_it *l_itendl;num2.insert(l_it,{666,777,888});display(num2);cout*l_it *l_itendl;num2.insert(l_it,num2.begin(),num2.end());display(num2);cout*l_it *l_itendl;coutendlendl;//-----------------------------//dequeint num1{0,1,2,3,4,5,6,7};display(num1);num1.push_back(333);num1.push_front(44444);display(num1);num1.pop_back();num1.pop_front();display(num1);coutdeque push anywhereendl;dequeint::iterator d_itnum1.begin();d_it;d_it2;cout*d_it *d_itendl;num1.insert(d_it,11);//insert前面一半前移前面一半后面一半后移display(num1);cout*d_it *d_itendl;num1.insert(d_it,3,222);display(num1);cout*d_it *d_itendl;num1.insert(d_it,{666,777,888});display(num1);cout*d_it *d_itendl;num1.insert(d_it,num1.begin(),num1.end());display(num1);cout*d_it *d_itendl;coutendl;}int main(void)
{test();return 0;
}作业
01STL包括哪些组件各自具有哪些特点
01 容器用来存放数据也是数据结构 02 算法用来实现容器的算法操作 03 迭代器用来访问容器中的成员是广义上的指针也叫泛型指针 04 适配器起到适配的作用 05 函数对象仿函数进行定制化操作 06 空间配置器对空间的申请和释放进行管理
02 序列式容器包括哪些他们之间有哪些异同
01 vector 可变数组 02 deque 双向队列 03 list 双向链表 04 foward_list 单向链表 05 array 数组
内存上array 和 vector是一片连续的空间其余是逻辑上连续物理存储时分散的
实现上vector底层通过三个指针实现分别指向第一个元素的位置最后一个元素的下一个位置最后一个空间的下一个位置 deque的实现依靠 中控器数组Map小片段实现的片段内部是连续的片段与片段之间是不连续的当deque需要扩容时直接对Map进行扩容申请新的小片段小片段成员包括四个指针分别指向第一个元素最后一个元素当前元素一个指针用于和Map进行联系 list 链表喵
使用上deque,vector支持随机访问list不支持
03 下面程序有什么错误
listint lst;
listint::iterator iter1 lst.begin(), iter2 lst.end();
while(iter1 iter2)
{ //....
}
list的迭代器不能进行比较,要用迭代器特有的
04 创建和初始化vector的方法每种都给出一个实例当然也可以把deque与list写出来
01 创建空容器 02 count个value 03 迭代器 04 {} 05 拷贝构造和移动构造
#include iostream
#include vector
#include deque
#include list
using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;template class T
void print( T con){for(auto ele: con){coutele ;}coutendl;
}void test(){/*1*/vectorint num0;/*2*/vectorint num1(10,5);//count same valueint arr[10]{0,1,2,3,4,5,6,7,8,9};/*3*/vectorint num2(arr,arr10);//[0,10)/*4*/vectorint num4(num1);/*4*/vectorint num5(vectorint{1,2,3});/*5*/vectorint num3{4,5,6,3,2,7,3,9};print(num0);print(num1);print(num2);print(num3);print(num4);print(num5);coutendl;
}
void test1(){/*1*/dequeint num0;/*2*/dequeint num1(10,5);//count same value/*3*/dequeint num2(num1.begin(),num1.end());//[0,10)/*4*/dequeint num4(num1);/*4*/dequeint num5(dequeint{1,2,3});/*5*/dequeint num3{4,5,6,3,2,7,3,9};print(num0);print(num1);print(num2);print(num3);print(num4);print(num5);coutendl;
}
void test2(){/*1*/listint num0;/*2*/listint num1(10,5);//count same value/*3*/listint num2(num1.begin(),num1.end());//[0,10)/*4*/listint num4(num1);/*4*/listint num5(listint{1,2,3});/*5*/listint num3{4,5,6,3,2,7,3,9};print(num0);print(num1);print(num2);print(num3);print(num4);print(num5);coutendl;
}
int main(void)
{test();test1();test2();return 0;
}05 如果c1与c2是两个容器下面的比较操作有什么限制if(c1 c2)
01是相同的容器类型 02容器的元素类型支持比较操作 03容器内部元素的顺序性比较deque,vector支持list不支持只能使用 04容器支持随机访问元素
06 STL中的std::deque容器的实现原理
deque的实现依靠 中控器数组Map小片段实现的片段内部是连续的片段与片段之间是不连续的当deque需要扩容时直接对Map进行扩容申请新的小片段小片段成员包括四个指针分别指向第一个元素最后一个元素当前元素一个指针用于和Map进行联系
07 评委打分的例子要求有五名选手ABCDE10个评委打分去掉最高分和最低分求出每个选手的平均分。
思路
1.创建Person类定义namescore成员属性创建五名选手存放到vector容器中
2.遍历vector容器首先10个评委的打分存放到deque容器中sort算法对分数排序去掉最高最低分
3.deque容器遍历进行剩余分数的累加求平均
4.输出每个选手的姓名成绩
提示还是容器vector与deque的基本使用
//嘻嘻每一个初始化都会worning#include iostream
#include vector
#include deque
#include string.h
#include random
using std::cout;
using std::endl;
using std::vector;
using std::deque;
using std::ostream;#define PER_NUM 5
#define SCO_NUM 10class Person{
public:
//const char* 坏终于知道为什么worning了Person(char* name,int sc):_name(new char[strlen(name)1]()),_score(sc){strcpy(_name,name);}Person(const Person p):_name(new char[strlen(p._name)1]()),_score(p._score){strcpy(_name,p._name);}//vector初始化使用拷贝构造~Person(){if(_name){delete [] _name;_namenullptr;}}Person operator(const Person p){if(this!p){delete [] _name;_namenew char[strlen(p._name)1]();strcpy(_name,p._name);_scorep._score;}return *this;}void p_sc(int sc){_scoresc;}friend ostream operator(ostream os,const Person p);
private:char* _name;int _score;
};
ostream operator(ostream os,const Person p){osp._name--p._score ;return os;
}//-------------------------//
void test(){Person p1(xixi,0);Person p2(jiajia,0);Person p3(kewu,0);Person p4(dada,0);Person p5(shazi,0);vectorPerson people{p1,p2,p3,p4,p5};std::random_device rd;//获取随机数种子std::mt19937 gen(rd());//生成随机数引擎std::uniform_int_distribution dis(60,100);//范围for(int i0;iPER_NUM;i){dequeint sc;for(int j0;jSCO_NUM;j){sc.push_back(dis(gen));/* coutsc[j] ; */}/* coutendl; */int max0,min0,rel0;for(auto ele:sc){if(elemax){maxele;}if(elemin){minele;}relele;}rel(rel-max-min)/(SCO_NUM-2);people[i].p_sc(rel); coutpeople[i]endl;}coutendl;
}
int main(void)
{test();return 0;
}#include iostream
#include string
#include vector
#include deque
#include algorithmusing namespace std;class Person
{
public:Person(const string name,int score) : _name(name), _score(score){}string _name;int _score;
};void creatPerson(vectorPerson vec)
{string nameSeed ABCDE;for (int idx 0; idx 5; idx){string name 选手;name nameSeed[idx];int score 0;Person p(name, score);vec.push_back(p);}
}void setScore(vectorPerson vec)
{for (vectorPerson::iterator it vec.begin(); it ! vec.end(); it){dequeint dq;for (int idx 0; idx 10; idx) {//将分数设定在[60, 100]范围中int score ::rand() % 41 60;//产生随机的分数dq.push_back(score);}//对分数进行排序sort(dq.begin(), dq.end());dq.pop_front();//去掉最低分dq.pop_back();//去掉最高分int sum 0;for (dequeint::iterator dit dq.begin(); dit ! dq.end(); dit){sum *dit;}//求10个评委的平均分int avg sum/dq.size();//然后将10个评委的平均分赋值给每个选手it-_score avg; }
}void showScore(vectorPerson vec)
{for (vectorPerson::iterator it vec.begin(); it ! vec.end(); it) {cout 姓名: it-_name 平均分数: it-_score endl;}
}int main()
{//种随机种子::srand(::clock());//定义Person类型的容器vectorPerson vec;//创建五名选手创建容器类里面的成员及其属性creatPerson(vec);//给每个选手设定分数让10个评委打分setScore(vec);//显示每个选手的分数showScore(vec); return 0;
} 不想看虽然我的初始化一直woring //Person(const char* name,int score)坏终于知道为什么worning了 08 编程题从一个 vectorchar 初始化一个 string。
提示可以定义vector如下vectorchar vc { H, E, L, L, O };然后查看如何给string进行初始化或者赋值考查对vector与string的基本使用
#include iostream
#include vector
#include deque
#include list
#include string
using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;
using std::string;//---------------------------------//void test(){vectorcharvc{h,e,l,l,o};string s1{\0};couts1endl;for(auto ele:vc){s1ele;}s1\0;couts1endl;
}int main(void)
{test();return 0;
} #include iostream
#include string
#include vector
using namespace std;
int main()
{vectorchar vc { H, E, L, L, O };string s(vc.data(), vc.size());cout s endl;return 0;
} 我好蠢嘻嘻 09 题目使用vector打印九九乘法表。
提示可以使用vector嵌套vector的使用方式。例如vectorvectorint然后就是veector的基本操作。
#include iostream
#include vector
#include deque
#include list
#include string
using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;
using std::string;//---------------------------------//void print(vectorvectorint con){for(int i0;i9;i){for(auto ell : con[i]){cout(i1)×ell(i1)*(ell) ;}coutendl;}
}//---------------------------------//
void test(){vectorvectorint v1(9);for(int i0;i9;i){vectorint tempv;for(int j0;ji;j){tempv.push_back(j1);}v1[i]tempv;}print(v1);
}int main(void)
{test();return 0;
}#includeiostream
#includevectorusing namespace std;int main()
{vectorvectorint v2d;for (int i 0; i 9; i){v2d.push_back(vectorint());}for (int i 0; i v2d.size(); i){for (int j 0; j i; j){v2d[i].push_back((i 1) * (j 1));}}for (int i 0; i v2d.size(); i){for (int j 0; j v2d[i].size(); j){cout i 1 * j 1 v2d[i][j] \t;}cout endl;}return 0;
} 01初始化9个空 vectorint--vectorvectorint 02vectorint存乘积 03打印