C++STL-线性结构

 

正文
*************************************************************************
//STL01联系图
第1视角=联系图
STL02线性结构
第3视角=结构清单
3.1 L线性结构line
3.1.1数组valarray
 1原理,特点与头文件
 原理:是指针数据类型装配成valarray数组类的线性结构.
 特点:与内置数组相比,它添加了更多函数方法和更安全.
 头文件:#include <valarray>

 2.ADT list
 2.1构造方法与大O分析 
 valarray<type> v //构造函数并设定容量 O(1)
 valarray<type> v(n); //构造函数并设定容量 O(1)
 2.2赋值方法与大O分析
 2.3添加方法与大O分析
 resize(size n);  //重置数组容量O(1)
 =   //=对象赋值O(N)
 2.4删除方法与大O分析
 free();   //清空数组O(N)
 2.5检查方法与大O分析
 size();   //返回数组元素个数O(1)
 2.6查找方法与大O分析
 []   //下标访问O(1)
 2.7排序方法与大O分析 无
 2.8特有方法与大O分析
 max();   //返回最大元素O(N)
 min();   //返回最小元素O(N)
 sum();   //返回数组元素之和O(N)
 2.9结构应用典型案例
 //complied with dev-c++4.99
 #include <cstdlib>
 #include <iostream>
 #include <valarray>
 using namespace std;
 int main(int argc, char *argv[])
 {
     valarray<int> v1(10),v2(10); //构造函数测试
     for(int i = 0; i < 10; ++i)
  {v1[i] = i;  v2[i] = i*2; }//循环赋值

     cout<<"v2.size()="<<v2.size()<<endl; //size()测试
  v2.resize(30);   //resize()测试
     cout<<"v2.size()="<<v2.size()<<endl; //size()测试
     cout<<"v2.max()="<<v2.max()<<endl; //max()测试
     cout<<"v2.min()="<<v2.min()<<endl; //min()测试
     cout<<"v2.sum()="<<v2.sum()<<endl;  //sum()测试
 v1.free();v2.free();   //free()测试
     system("PAUSE");
     return EXIT_SUCCESS;
 }

3.1.2位串bitset
 1原理特点与头文件
 原理:由2进制位构成的位串bitset类
 特点:非常方便的使用以开关位的2进制位
 头文件:#include <bitset>
 2.ADT list
 2.1构造方法与大O分析
 bitset<n> b;  //n为位长,b中所有位默认为0
 bitset<n> b(u);  //u为unsigned long,用u对象初始化b
 bitset<n> b(s);  //s为string,s对象初始化b
 bitset<n> b(s,pos,n); //s为string,从s的pos位的n个字符起来初始化b
 2.2赋值方法与大O分析
 b.set();  //b的所有位置1
 b.set(n);  //b的第n位置1
 b.reset();  //b的所有置0
 b.reset(n);  //b的第n位置0
 b.flip();  //b的所有位置反
 b.flip(n);  //b的第n位置反
 2.3添加方法与大O分析 无
 2.4删除方法与大O分析 无
 2.5检查方法与大O分析
 b.at(n);  //返回第n位的值
 b.size();  //返回b中位的长度
 b.count();  //返回b中值为1的个数
 b.any();  //判断b任何位是否为1?
 b.none();  //判断b任何位是否不为1?
 b.test(n);  //判断b的n位是否为1?
 2.6查找方法与大O分析 无
 2.7排序方法与大O分析 无 
 2.8特有方法与大O分析
 b.to_ulong();  //b的值转换为unsigned long
 b.to_string();  //b的值转换为string
 outs<<b;  //输出流
 ins>>b;   //输入流
 2.9结构应用典型案例
 //complied ok with vc++6.0
 #include <iostream>
 #include <bitset>
 using namespace std;
 int main(int argc, char *argv[])
 {
 unsigned long u=0xffff;
 string s1("1111000011000011");
 //测试构造函数
 bitset<16> b;
 bitset<16> s(s1);  
 bitset<16> ul1(u);
 bitset<16> ul2(s1,8,8);
 cout<<"b=  "<<b<<endl;
 cout<<"s=  "<<s<<endl; 
 cout<<"ul1="<<ul1<<endl;
 cout<<"ul2="<<ul2<<endl;
 //测试检查函数
 cout<<"s.any()="<<s.any()<<endl;
 cout<<"s.none()="<<s.none()<<endl;
 cout<<"s.count()="<<s.count()<<endl;
 cout<<"s.size()="<<s.size()<<endl;
 cout<<"s.test(1)="<<s.test(1)<<endl;
 cout<<"s.at(1)="<<s.at(1)<<endl;

 //测试位操作函数
 cout<<"s.set()="<<s.set()<<endl;
 cout<<"s.set(1)="<<s.set(1)<<endl;
 cout<<"s.reset()="<<s.reset()<<endl;
 cout<<"s.reset(1)="<<s.reset(1)<<endl;
 cout<<"s.flip()="<<s.flip()<<endl;
 cout<<"s.flip(1)="<<s.flip(1)<<endl;
 //测试转换函数
 cout<<"ul1.to_ulong()="<<ul1.to_ulong()<<endl;
 //cout<<"ul1.to_string="<<ul1.to_string()<<endl;
     return 0;
 }
 
3.1.3字符char
 1C风格char字符串函数
 头文件:c风格"string.h" c++风格<string>
 char*  strcpy(char*p, const char*q); //q复制并替换p
 char*  strcat(char*p, const char*q); //q附加到p后面
 int    strcmp(const char*p, const char*q);//比较p,q,p<q返回值<0,p==q返回值=0,p>q返回值>0
 size_t  strlen(const char*p);  //q的长度

 2C风格char字符分类函数
 头文件:c风格"ctype.h" c++风格<cctype>
 int isalpha(int); //是字母?
 int isupper(int); //是大写字母?
 int islower(int); //是小写字母?
 int isdigit(int); //是10进制数字?
 int isxdigit(int); //是16进制数字?
 int isspace(int); //是空格符?
 int isalnum(int); //是数字或者字母?
 int isprint(int); //是打印字符?
 int isgraph(int); //是图形符号?
 int iscntrl(int); //是控制符?
 int toupper(int); //转换为大写
 int tolower(int); //转换为小写

 3C风格结构应用典型案例 
 //filename demo.c
 #include <ctype.h>
 #include <string.h>
 void ctypetest();
 void stringtest();
 int main()
 {
  ctypetest();
  stringtest();
  return 0;
 }

 void ctypetest()
 {
  int temp,ii;
  int isalpha_cnt=0;
  int isupper_cnt=0;
  int islower_cnt=0;
  int isdigit_cnt=0;
  int isxdigit_cnt=0;
  int isspace_cnt=0;
  int isalnum_cnt=0;
  int isprint_cnt=0;
  int isgraph_cnt=0;
  int iscntrl_cnt=0;
  for (ii=0;ii<128;ii++){
   temp=ii;
   if isalpha(temp) isalpha_cnt++;
   if isupper(temp) isupper_cnt++; 
   if islower(temp) islower_cnt++;   
   if isdigit(temp) isdigit_cnt++;
   if isxdigit(temp) isxdigit_cnt++; 
   if isspace(temp) isspace_cnt++; 
   if isalnum(temp) isalnum_cnt++;
   if isprint(temp) isprint_cnt++; 
   if isgraph(temp) isgraph_cnt++; 
   if iscntrl(temp) iscntrl_cnt++; 
  }
  printf("isalpha(0-127)=%d /n",isalpha_cnt);
  printf("isupper(0-127)=%d /n",isupper_cnt);
  printf("islower(0-127)=%d /n",isupper_cnt);
  printf("isdigit(0-127)=%d /n",isupper_cnt);
  printf("isxdigit(0-127)=%d /n",isxdigit_cnt);
  printf("isspace(0-127)=%d /n",isspace_cnt); 
  printf("isalnum(0-127)=%d /n",isalnum_cnt);
  printf("isprint(0-127)=%d /n",isprint_cnt);
  printf("isgraph(0-127)=%d /n",isgraph_cnt);
  printf("iscntrl(0-127)=%d /n",iscntrl_cnt);
 }
 void stringtest(){
  char c1[12]="hello";
  char c2[6]="test/0";
  printf("c1=%s /n",c1);
  printf("c2=%s /n",c2);
  printf("strcpy(c1,c2)=%s /n",strcpy(c1,c2));
  printf("strcat(c1,c2)=%s /n",strcat(c1,c2));
  printf("strcmp(c1,c2)=%d /n",strcmp(c1,c2));
  printf("strlen(c1)=%d /n",strlen(c1));
 }
 
3.1.4字符串string
 1原理,特点与头文件
 string不是C/C++内置的字符串,而是一个字符串类
 2ADT list
 2.1构造方法与大O分析
     string(string& _string)
     string(string& s)
     string(char* s, int n,)
     string(int n, char c,)
    string&  operator=(char* s)
     string&  operator=(char c)
    ~string()
 2.2赋值方法与大O分析
     string&    assign( string& x)
   string&    assign( string& s, int pos, int n)
     string&    assign( char* s, int n)
     string&    assign( char* s)
     string&    assign(int n, char c)
 2.3插入与添加方法和大O分析
     string&    insert(int pos,  string& s)
     string&    insert(int pos,  string& s,    int pos2, int n)
     string&    insert(int pos,  char* s, int n)
     string&    insert(int pos,  char* s)
     string&    insert(int pos, int n, char c)
     string&    operator+=( string& s)
     string&    operator+=( char* s)
    string&    operator+=(char c)
     string&    append(string& s)
     string&    append(string& s, int pos, int n)
     string&    append(char* s, int n)
     string&    append(char* s)
     string&    append(int n, char c)
 2.4删除方法与大O分析
     string&    erase(int pos, int n = pos)
     iterator   erase(iterator position)
     iterator   erase(iterator first, iterator last)
 2.5替换方法与大O分析
     string&    replace(int pos, int n1,string& s)
     string&    replace(int pos, int n1,string& s,  int pos2, int n2)
     string&    replace(int pos, int n1,char* s,  int n2)
     string&    replace(int pos, int n1,char* s)
     string&    replace(int pos, int n1, int n2, char c)
     string&    replace(iterator i1, iterator i2,string& s)
     string&    replace(iterator i1, iterator i2,char* s, int n)
     string&    replace(iterator i1, iterator i2,char* s)
     string&    replace(iterator i1, iterator i2,int n, char c)
 2.6查找方法与大O分析
     int    find(string& s, int pos)
     int    find(char* s, int pos, int n)
     int    find(char* s, int pos)
    int    rfind(string& s, int pos = pos)
     int    rfind(char* s, int pos, int n)
     int    rfind(char* s, int pos = pos)
    int    find_first_of(string& s, int pos)
     int    find_first_of(char* s, int pos, int n)
     int    find_first_of(char* s, int pos)
     int    find_last_of(char* s, int pos, int n)
    int    find_last_of(char* s, int pos = pos)
    int    find_first_not_of(string& s, int pos)
    int    find_first_not_of(char* s, int pos, int n)
   int    find_first_not_of(char* s, int pos)
   int    find_last_not_of(string& s, int pos = pos)
    int    find_last_not_of(char* s, int pos, int n)
    int    find_last_not_of(char* s, int pos = pos)
 2.7迭代器与大O分析
     iterator begin()
     iterator end()
    reverse_iterator rbegin()
     reverse_iterator rend()
 2.8特有方法与大O分析
    void   resize(int n, char c)
    void   resize(int n)
    void   clear()
     reference  operator[](int pos)
     void   push_back(char c)
     int    copy(char* s, int n, int pos)
     void   swap(string& x)
     string substr(int pos, int n = pos)
     int    compare(string& s)
     int    compare(char* s)
     int    compare(int pos, int n1,  char* s)
     int    compare(int pos, int n1,  string& s)
     int    compare(int pos, int n1,  string& s,int pos2, int n2)
 2.9结构应用典型案例
 

3.1.4堆heap
 1原理,特点与头文件
 堆是一种非常快速的结构,它由动态数组构成.
 #include <bits/stl_heap.h>
 using std::push_heap; //添加
 using std::pop_heap; //删除
 using std::make_heap; //生成堆
 using std::sort_heap; //排序堆
 2ADT list
 2.1不带排序标记的方法与大O分析
 void push_heap(First,Last);
 void pop_heap( First,Last);
 void make_heap(First,Last);
 void sort_heap(First,Last);
 2.2不带排序标记的方法与大O分析
 void push_heap(First,Last,Compare flag);
 void pop_heap( First,Last,Compare flag);
 void make_heap(First,Last,Compare flag);
 void sort_heap(First,Last, Compare flag);
 3结构应用典型案例

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值