在内存中存储结构体类型的变量要占连续一段的存储单元,操作系统实现内存管理的常使用的数据结构为

  在内存中存储结构体类型的变量要占连续一段的存储单元,操作系统实现内存管理的常使用的数据结构为

  第0篇编译运行本章例程0.1指针0.2函数指针0.3调用函数指针0.4返回函数指针0.5初始化字符串指针数组0.6主函数的参数0.7处理单个文件读写0.8处理多个文件读写0.9自动管内存0.10为对象分配和释放内存0.11为数组分配和释放空指针0.12为数组分配和释放内存1重写学生成绩程序, 要求生成字母成就2重写中值函数,使其可以通过向量或C自带数组调用函数。 该函数要求您可以调用保存任何算术类型的容器。3需要编写一个mdian函数,它不会改变容器中元素的顺序4。写一个可以存储字符串链表的类(也就是写一个vector\) 5。为上面的String_list类写一个双向迭代器(不带尾指针)6。重写split函数并将结果输出到String_list类。

  0编译并运行本章程序。

  0.1指针//指针

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  int main(int argc,char** argv){

  int x=5;

  int * p=x;//指向x地址的指针

  cout x= x endl

  * p=6;

  cout x= x endl

  返回0;

  }

  0.2函数指针//函数指针

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  int next(int n){

  返回n ^ 1;

  }

  int main(int argc,char** argv){

  int(* FP)(int);

  fp=next//将fp指向下一个函数

  //FP=next;

  int I=(* FP)(6);

  //int I=FP(6);

  cout i endl

  返回0;

  }

  0.3调用函数的指针//返回函数的指针

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  使用STD:ostream;

  int test1(int a){

  返回1;

  }

  int test2(int b){

  返回B3;

  }

  void write(ostream out,int test(int),int a){

  out test(a)endl;

  }

  void write2(ostream out,int (*test)(int),int a){

  out test(a)endl;

  }

  int main(int argc,char** argv){

  int x=10

  write(cout,test1,x);

  write(cout,test2,x);

  write2(cout,test1,x);

  write2(cout,test2,x);

  返回0;

  }

  0.4返回指向函数的指针//返回指向函数的指针

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  使用STD:ostream;

  int test1(int a){

  a;

  返回a;

  }

  //声明

  typedef int(* test _ FP)(int);

  test _ FP test3(int);

  //定义

  test_fp test3(int x){

  int(* FP)(int)=test1;

  (* FP)(x);//x的值变成11

  返回FP;

  }

  //声明

  int(* test 4(int))(int);

  //定义

  int (*test4(int x))(int ){

  int(* FP)(int)=test1;

  (* FP)(x);//x的值变成11

  返回FP;

  }

  void write2(ostream out,int test(int),int a){

  out test(a)endl;

  }

  int main(int argc,char** argv){

  int x=10

  //当//测试通过时,引用会导致x的变化,当write通过时,没有引用,计算完值后丢弃。

  //10加2

  //第一次调用test时加1。因为是引用,所以X实际上会变成11。第二次调用write时加1。虽然结果是12,但是X的值仍然是11。

  write2(cout,test3(x),x);

  write2(cout,test4(x),x);//11加2

  返回0;

  }

  0.5初始化字符串指针数组//初始化字符串指针数组

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  使用STD:string;

  字符串字母_等级(双等级){

  静态常数double numbers[]={

  97, 94, 90, 87, 84, 80, 77, 74, 70, 60, 0

  };

  静态常量char*常量字母[]={

   A , A , B , B , C , C-, D , F

  };

  static const size _ t n grades=sizeof(数字)/sizeof(*数字);//计算这个元素的数目

  for(size _ t I=0;i ngradesi) {

  if(grade=numbers[i]){

  回信[I];

  }

  }

  返回?\?\?;//C不允许两个或多个连续的问号。

  }

  int main(int argc,char** argv){

  const char hello[]={H , e , l , l , \ 0 };

  static char hello3[]={H , e , l , l , o };//初始化时,自动在末尾加上 \0 。

  string hello2= Hello

  //测试1

  //if(hello3==hello2){

  //cout“Yes”;

  //}其他{

  //cout“No”;

  //}

  //测试2

  //cout strlen(hello)endl;//不包括末尾的\0

  //测试三

  //string s(hello,hello strlen(hello));

  //cout s

  //测试四

  cout letter _ grade(88)endl;

  返回0;

  }

  0.6主函数的参数//勉函数的参数

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  int main(int argc,char** argv){

  if(argc 1){

  cout argv[1];

  for(int I=2;我!=argci) {

  cout argv[I];

  }

  }

  cout结束

  cout argc endl

  返回0;

  }

  0.7 处理单个文件读写//处理文件的读写

  #包括

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  使用STD:if流;

  使用STD:of stream;

  使用STD:string;

  int main(int argc,char** argv){

  string file=/Users/macbook pro/clion projects/ACM/infile。txt ;

  ifstream infile(文件。c _ str());

  //ifstream infile(/Users/macbook pro/clion projects/ACM/infile。txt’);//等价于上面的两行

  的流输出文件(/Users/macbook pro/clion projects/ACM/outfile。txt’);

  字符串s;

  while(getline(infile,s)){

  输出文件结尾

  }

  返回0;

  }

  0.8 处理多个文件的读写//多个文件读入

  #包括

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  使用STD:if流;

  使用STD:of stream;

  使用STD:string;

  使用STD:cerr;

  int main(int argc,char** argv){

  int fail _ count=0;

  for(int I=1;i argci) {

  if stream in(argv[I]);

  如果(在){

  字符串s;

  while(getline(in,s)){

  cout s endl

  }

  }否则{

  " cerr "无法打开文件“argv[I]endl;

  失败计数;

  }

  返回失败计数

  }

  返回0;

  }

  /*

  /用户/macbook pro/clion projects/ACM/infile 2。txt/用户/macbook pro/clion projects/ACM/infile。文本文件(textfile)

  */

  0.9 自动管理内存//自动管理内存

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  //故意产生一个无效指针

  int* invalid_pointer(){//c并不会发现错误

  int x;

  返回x;//紧急灾难

  }

  int* pointer_to_static(){

  静态int x;

  返回x;

  }

  int main(int argc,char** argv){

  cout invalid _ pointer()endl;

  标准输出指针_指向_静态();

  返回0;

  }

  0.10 为对象分配释放内存//为对象分配释放内存

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  int main(int argc,char** argv){

  int * p=new int(42);

  * p;

  删除p;

  cout * p;//指针p依然存在,且指向的地址不变。

  返回0;

  }

  0.11 为数组分配和释放空指针//为数组分配和释放指针

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  使用STD:vector;

  int main(int argc,char** argv){

  int n=0;

  int * p=new int[n];//会返回一个有效但无意义的在终点之外指针

  //可以想象成一个指向(如果存在的话)首元素的指针

  向量int v(p,p n);

  删除[]p;

  返回0;

  }

  0.12 为数组分配释放内存//为数组分配释放内存

  #包括

  #包括

  #包括

  使用STD:cout;

  使用STD:CIN;

  使用STD:endl;

  size_t strlen(const char* p){

  size _ t size=0;

  while(*p!=\0){

  尺寸;

  }

  返回大小;

  }

  模板类输入,类输出

  输出副本(输入开始,输入结束,输出目标){

  而(开始!=end){

  *目标=*开始

  }

  返回目的地;

  }

  char* duplicate(const char* p){

  size _ t length=strlen(p)1;//为空字符预留空间\0

  char * result=new char[length];

  复制(p,p长度,结果);

  返回结果;

  }

  int main(int argc,char** argv){

  char str[]={i , l , o , v , e };

  STD:string s=duplicate(str);

  cout s;

  返回0;

  }

  一重写学生成绩程序,要求生成字母成绩头文件

  //

  //grade.h

  //

  #ifndef ACM_GRADE_H

  #定义ACM等级H

  #包括

  #包含"学生信息"

  双等级(双、双、双);

  double grade(double,double,const STD:vector double);

  //双等级(const学生信息

  #endif//

  //tudent_info.h

  //

  #ifndef ACM_Student_info

  #定义ACM _学生信息

  #包括

  #包括

  #包括

  //结构学生信息{

  //std:字符串名称;

  //双期中,期末;

  //std:矢量作业;

  //

  //STD:istream read(STD:istream

  //double garde()const;

  //};

  班级学生信息{

  公共:

  学生信息();//构造一个空的学生信息对象

  student _ info(STD:istream);//读一个流从而构造一个对象

  bool vaild() const{ return!工作。empty();}//检查对象是否为空

  双等级()常数

  STD:istream read(STD:istream);

  STD:string name()const { return n;}//存取器:容许对一部分数据结构的进行访问

  私人:

  STD:string n;

  双期中考,期末考;

  标准:向量双作业;

  };

  bool compare(const Student_info,const Student _ info);

  STD:istream read _ HW(STD:istream,STD:vector double);

  //STD:istream read(STD:istream,Student_info

  #endif#include

  #包括

  #包括

  #包括

  #包括

  #包括

  #包括

  #包括

  #include Student_info.h

  #包含" h级"

  使用STD:CIN;使用STD:cout;

  使用STD:endl;

  使用STD:istream;

  使用STD:vector;

  使用STD:string;

  使用STD:max;

  使用STD:sort;

  使用STD:domain _ error;

  使用STD:设置精度;

  使用STD:streamsize;

  //默认构造函数

  学生信息:学生信息():期中(0),期末(0){ }

  //带参构造函数

  Student _ info:Student _ info(istream is){ read(is);}

  布尔比较(常量学生信息x,常量学生信息y){

  返回x . name()y . name();

  }

  istream Student _ info:read(istream in){

  期中期末考试;

  读取硬件(在,作业);

  返回;

  }

  istream read_hw(istream in,vector double hw){

  如果(在){

  硬件。clear();

  双x;

  而(在x中){

  硬件。push _ back(x);

  }

  英寸clear();

  }

  返回;

  }

  双中值(向量双向量){

  typedef vector double:size _ type vec _ SZ;

  vec _ SZ size=vec。size();

  if(size==0){

  抛出domain_error(空向量的中值);

  }

  sort(vec.begin()、vec。end());

  vec _ SZ mid=size/2;

  返回大小% 2==0?(vec[mid]vec[mid-1])/2:vec[mid];

  }

  double Student _ info:grade()const {

  //:使用这个名称的某一个版本,而所使用的这个版本不能称为任何事物的成员

  返回:成绩(期中、期末、作业);

  }

  双倍分数(双倍期中,双倍期末,常数向量双倍硬件){

  if(hw.size()==0)

  抛出domain_error(学生没有做作业);

  回报等级(期中、期末、中位数(HW));//如果家庭作业非空,则调用三年级

  }//2级

  双倍分数(期中双倍,期末双倍,硬件双倍){

  返回期中* 0.2期末* 0.4硬件* 0.4

  }

  字符串字母_等级(双等级){//新增

  //分数成绩的界限

  静态常数双数[]={

  97, 94, 90, 87, 84, 80, 77, 74, 70, 60, 0

  };

  //字母成绩表示

  静态常量字符*常量字母[]={

   A , A , A-, B , B-, C , C-, D , F

  };

  //根据数组的大小计算成绩的个数

  //和单个元素的大小

  静态常数size _ t n grades=sizeof(数字)/sizeof(*数字);

  for(size _ t I=0;i ngradesi) {

  if(grade=numbers[i]){

  回函[I];

  }

  }

  返回?\?\?

  }

  int main(int argc,char const *argv[]){

  矢量学生信息学生;

  学生信息记录;

  string:size _ type maxlen=0;

  while(record.read(cin)){//

  maxlen=max(maxlen,record.name().size());//

  学生。推回(记录);

  }

  排序(students.begin()、students.end()、compare);

  for(vector Student _ info:size _ type I=0;我!=学生。size();i) {

  标准输出学生[我].name()//

  字符串(maxlen 1 -学生[我].名称()。size(), );

  //尝试{

  //double final _ grade=students[I].年级();

  //streamsize prec=cout。精度();

  //cout setprecision(3)final _ grade

  //设置精度(prec)endl;

  //}catch(domain_error e){

  //cout e . what()endl;

  //}

  如果(学生[我]。vaild()==true){

  双期末_成绩=学生[我].年级();

  //streamsize prec=cout。精度();

  //cout setprecision(3)final _ grade

  //设置精度(prec)endl;

  标准输出字母_ grade(final _ grade)endl;//新增

  }否则{

  cout 作业是空的!恩德尔

  }

  }

  返回0;

  }2 重写中位数函数,使之可以通过向量或C自带的数组以调用该函数。该函数要求可以调用容纳任何算数类型的容器。//求中位数

  #包括

  #包括

  #包括

  #包括

  #包括

  使用STD:CIN;使用STD:cout;

  使用STD:endl;

  使用STD:vector;

  使用STD:domain _ error;

  使用STD:sort;

  使用STD:ostream;

  中的模板类

  在中间(在开始,在结束){

  size_t size=std:distance(begin,end);

  if(size==0){

  抛出domain_error(空向量的中值);

  }

  排序(开始,结束);

  size _ t mid=size/2;

  在ans=开始中期;//偶数个

  if(size % 2==0){//奇数个

  * ans=(*(begin mid)*(begin mid-1))/2;

  //* ans=(begin[mid]begin[mid-1])/2;//与上面等价

  }

  返回美国国家标准(American National Standards的缩写)

  }

  int main(int argc,char const *argv[])

  {

  向量双v={ 85,74,75,45,49,67 };

  cout *median(v.begin()、v . end())endl;

  返回0;

  }3 要求写一个不会改变容器内元素顺序的中位数函数//求中位数

  #包括

  #包括

  #包括

  #包括

  #包括

  使用STD:CIN;使用STD:cout;

  使用STD:endl;

  使用STD:vector;

  使用STD:domain _ error;

  使用STD:sort;

  使用STD:ostream;

  中的模板类,类T

  t中值(开始时,结束时){

  size_t size=std:distance(begin,end);

  if(size==0){

  抛出domain_error(空向量的中值);

  }

  //把容器内的元素复制到向量中,进行排序计算,以免影响原序列

  STD:vector T v;

  而(开始!=end){

  五。push _ back(* begin);

  }

  std:sort(v.begin()、v . end());

  size _ t mid=size/2;

  返回大小% 2==0?(v[mid]v[mid-1])/2:v[mid];

  }

  int main(int argc,char const *argv[])

  {

  向量双v={ 85,74,75,45,49,67 };

  double v2[]={85,74,75,45,49,67 };

  标准输出中值向量double :iterator,double (v.begin()、v . end())endl;

  for(vector double:const _ iterator it=v . begin();它!=v . end();它){

  cout * it

  }

  cout结束

  cout median double*,double (v2,v2(sizeof(v2)/sizeof(* v2)))endl;

  for(int I=0;I(sizeof(v2)/sizeof(* v2));i) {

  cout v2[I]”;

  }

  返回0;

  }4 写一个类可以存储用线串的链表(也就是写一个向量)头文件

  #ifndef TEST_H

  #定义测试_H

  #包括

  类字符串列表{

  公共:

  typedef std:string*迭代器;

  typedef const STD:string * const _ iterator;

  //构造函数

  string _ list():l(new STD:string[1]),size(0),max(1){

  f=l最大值

  }

  //复制构造函数

  String _ list(const String _ list s){ create(s . begin()、s . end());}

  //赋值运算符函数

  字符串列表运算符=(const String_list rhs){

  如果(rhs!=这个){

  un create();

  create(rhs.begin()、rhs。end());

  }

  返回*这个

  }

  //析构函数

  ~ String _ list(){ un create();};

  void push _ back(STD:string);

  STD:string * begin(){ return l;}

  const STD:string * begin()const { return l;}

  STD:string * end(){ return f;}

  const STD:string * end()const { return f;}

  私人:

  STD:string * l;//指针指向第一个元素

  STD:string:size _ type size;//拥有有效数值的最大长度

  STD:string:size _ type max;//分配空间的最大长度

  STD:string * f;//指针指向存储元素的最后一个后面的指针

  void grow();

  void create(const std:string*,const STD:string *);

  void uncreate(){

  删除[](l);

  l=f=0;

  size=max=0;

  }

  };

  #endif主函数

  #包括

  使用STD:CIN;使用STD:cout;

  使用STD:endl;

  #包括

  使用STD:string;

  #包含" test.h "

  #包括

  使用STD:find _ if;

  void String _ list:create(const _ iterator begin,const_iterator end){

  size=max=end-begin;

  l=新字符串[大小];

  迭代器temp=l;

  而(开始!=end){

  *温度=*开始

  }

  f=l尺寸;

  }

  //推送_返回函数的成员函数

  void String_list:grow() {

  //扩展对象大小时,为对象分配实际使用的两倍大小的内存空间

  max *=2;

  迭代器new_l=新字符串[max];

  //分配新的内存空间并将已存在的对象元素内容复制搭配新内存中

  for(string:size _ type I=0;我!=大小;i) {

  new _ l[I]=l[I];

  }

  //删除原来的内存空间

  删除[](l);

  //重置指针,使其指向新分配的内存空间

  l=新_ l

  f=最大新长度

  }

  void String _ list:push _ back(STD:String str){

  if(size==max){

  grow();

  }

  l[size]=str;

  }

  bool not_space(char c){

  回归!是空间(c);

  }

  布尔空格(字符c){

  返回是空间(c);

  }

  string _ list split(const string str){

  typedef string:const _ iterator ITER;

  字符串列表返回

  ITER一世=str。begin();

  而(我!=str.end()){

  i=find_if(i,str.end(),not _ space);

  iter j=find_if(i,str.end(),space);

  如果(我!=str.end()){

  ret.push_back(string(i,j));

  }

  I=j;

  }

  返回浸水使柔软

  }

  int main(int argc,char ** argv){

  字符串_列表s;

  //复制构造函数

  s。push _ back( I );

  s.push_back(爱);

  s.push_back(你);

  s.push_back(!);

  //复制构造函数

  string _ list S2=s;

  迭代程序ITER=S2。begin();

  while (iter!=s2.end())

  cout * iter endl

  //测双向迭代器

  while(iter!=s2.begin()){

  cout *(ITER)endl;

  }

  //测赋值运算符

  //String _ list S3;

  //S3。push _ back( I );

  //s3.push_back(恨);

  //S3。push _ back( U );

  //S2=S3;

  //for(String _ list:iterator it=S2。begin();它!=S2。end();它){

  //cout * it " ";

  //}

  //测使分离函数

  //字符串s;

  //while(cin)

  //String _ list RES=split(s);

  //for(string * it=RES . begin();它!=RES . end();它){

  //cout * it endl;

  //}

  //}

  返回0;

  }5 为上面的字符串列表类写一个双向迭代器(不用尾指针)#ifndef TEST_H

  #定义测试_H

  #包括

  类字符串列表{

  公共:

  typedef std:string*迭代器;

  typedef const STD:string * const _ iterator;

  //构造函数

  string _ list():l(new STD:string[1]),size(0),max(1){}

  //复制构造函数

  String _ list(const String _ list s){ create(s . begin()、s . end());}

  //赋值运算符函数

  字符串列表运算符=(const String_list rhs){

  如果(rhs!=这个){

  un create();

  create(rhs.begin()、rhs。end());

  }

  返回*这个

  }

  //析构函数

  ~ String _ list(){ un create();};

  void push _ back(STD:string);

  STD:string * begin(){ return l;}

  const STD:string * begin()const { return l;}

  STD:string * end(){ return l size;}

  const STD:string * end()const { return l size;}

  私人:

  STD:string * l;//指针指向第一个元素

  STD:string:size _ type size;//有有效数值的最大长度

  STD:string:size _ type max;//分配空间的最大长度

  void grow();

  void create(const std:string*,const STD:string *);

  void uncreate(){

  删除[](l);

  l=0;

  size=max=0;

  }

  };

  #endif#include

  使用STD:CIN;使用STD:cout;

  使用STD:endl;

  #包括

  使用STD:string;

  #包含" test.h "

  #包括

  使用STD:find _ if;

  void String _ list:create(const _ iterator begin,const_iterator end){

  size=max=end-begin;

  l=新字符串[大小];

  迭代器temp=l;

  而(开始!=end){

  *温度=*开始

  }

  }

  //推送_返回函数的成员函数

  void String_list:grow() {

  //扩展对象大小时,为对象分配实际使用的两倍大小的内存空间

  max *=2;

  迭代器new_l=新字符串[max];

  //分配新的内存空间并将已存在的对象元素内容复制搭配新内存中

  for(string:size _ type I=0;我!=大小;i) {

  new _ l[I]=l[I];

  }

  //删除原来的内存空间

  删除[](l);

  //重置指针,使其指向新分配的内存空间

  l=新_ l

  }

  void String _ list:push _ back(STD:String str){

  if(size==max){

  grow();

  }

  l[size]=str;

  }

  bool not_space(char c){

  回归!是空间(c);

  }

  布尔空格(字符c){

  返回是空间(c);

  }

  string _ list split(const string str){

  typedef string:const _ iterator ITER;

  字符串列表返回

  ITER一世=str。begin();

  而(我!=str.end()){

  i=find_if(i,str.end(),not _ space);

  iter j=find_if(i,str.end(),space);

  如果(我!=str.end()){

  ret.push_back(string(i,j));

  }

  I=j;

  }

  返回浸水使柔软

  }

  int main(int argc,char ** argv){

  字符串_列表s;

  //复制构造函数

  s。push _ back( I );

  s.push_back(爱);

  s.push_back(你);

  s.push_back(!);

  //

  //复制构造函数

  string _ list S2=s;

  迭代程序ITER=S2。begin();

  while (iter!=s2.end())

  cout * iter endl

  //测双向迭代器

  while(iter!=s2.begin()){

  cout *(ITER)endl;

  }

  //

  //

  ////测赋值运算符

  //String _ list S3;

  //S3。push _ back( I );

  //s3.push_back(恨);

  //S3。push _ back( U );

  //

  //S2=S3;

  //for(String _ list:iterator it=S2。begin();它!=S2。end();它){

  //cout * it " ";

  //}

  //测使分离函数

  //字符串s;

  //while(cin)

  //String _ list RES=split(s);

  //for(string * it=RES . begin();它!=RES . end();它){

  //cout * it endl;

  //}

  //}

  返回0;

  }6 重写使分离函数将结果输出到字符串列表类中。ifndef测试_H

  #定义测试_H

  #包括

  类字符串列表{

  公共:

  typedef std:string*迭代器;

  typedef const STD:string * const _ iterator;

  //构造函数

  string _ list():l(new STD:string[1]),size(0),max(1){}

  //复制构造函数

  String _ list(const String _ list s){ create(s . begin()、s . end());}

  //赋值运算符函数

  字符串列表运算符=(const String_list rhs){

  如果(rhs!=这个){

  un create();

  create(rhs.begin()、rhs。end());

  }

  返回*这个

  }

  //析构函数

  ~ String _ list(){ un create();};

  void push _ back(STD:string);

  STD:string * begin(){ return l;}

  const STD:string * begin()const { return l;}

  STD:string * end(){ return l size;}

  const STD:string * end()const { return l size;}

  私人:

  STD:string * l;//指针指向第一个元素

  STD:string:size _ type size;//有有效数值的最大长度

  STD:string:size _ type max;//分配空间的最大长度

  void grow();

  void create(const std:string*,const STD:string *);

  void uncreate(){

  删除[](l);

  l=0;

  size=max=0;

  }

  };

  #endif#include

  使用STD:CIN;使用STD:cout;

  使用STD:endl;

  #包括

  使用STD:string;

  #包含" test.h "

  #包括

  使用STD:find _ if;

  void String _ list:create(const _ iterator begin,const_iterator end){

  size=max=end-begin;

  l=新字符串[大小];

  迭代器temp=l;

  而(开始!=end){

  *温度=*开始

  }

  }

  //推送_返回函数的成员函数

  void String_list:grow() {

  //扩展对象大小时,为对象分配实际使用的两倍大小的内存空间

  max *=2;

  迭代器new_l=新字符串[max];

  //分配新的内存空间并将已存在的对象元素内容复制搭配新内存中

  for(string:size _ type I=0;我!=大小;i) {

  new _ l[I]=l[I];

  }

  //删除原来的内存空间

  删除[](l);

  //重置指针,使其指向新分配的内存空间

  l=新_ l

  }

  void String _ list:push _ back(STD:String str){

  if(size==max){

  grow();

  }

  l[size]=str;

  }

  bool not_space(char c){

  回归!是空间(c);

  }

  布尔空格(字符c){

  返回是空间(c);

  }

  string _ list split(const string str){

  typedef string:const _ iterator ITER;

  字符串列表返回

  ITER一世=str。begin();

  而(我!=str.end()){

  i=find_if(i,str.end(),not _ space);

  iter j=find_if(i,str.end(),space);

  如果(我!=str.end()){

  ret.push_back(string(i,j));

  }

  I=j;

  }

  返回浸水使柔软

  }

  int main(int argc,char ** argv){

  //String _ list s;

  ////复制构造函数

  //s . push _ back( I );

  //s . push _ back( love );

  //s . push _ back( you );

  //s.push_back(!);

  ////复制构造函数

  //String _ list S2=s;

  //

  //String _ list:迭代器ITER=S2。begin();

  //while (iter!=s2.end())

  //cout * ITER endl;

  ////测双向迭代器

  //while(iter!=s2.begin()){

  //cout *(ITER)

  //}

  ////测赋值运算符

  //String _ list S3;

  //S3。push _ back( I );

  //s3.push_back(恨);

  //S3。push _ back( U );

  //

  //S2=S3;

  //for(String _ list:iterator it=S2。begin();它!=S2。end();它){

  //cout * it " ";

  //}

  //测使分离函数

  字符串s;

  (CIN ){

  string _ list RES=split(s);

  for(string * it=RES . begin();它!=RES . end();它){

  cout * it结束

  }

  }

  返回0;

  }

  来自51C

  TO博客作者fanxinglanyu的原创作品,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: