标准库类型(vector 、string、 bitset类型)

    技术2022-05-14  9

    1、命名空间的using声明

        格式:

        1)using namespace::name;         如 using std::cin;

        2)using namespace 命名空间名;    如 using namespace std;


    2、string类型

        1)必须包含的头文件

         #include  <string>

         using std::string;

        2)string对象的读写

     

         a)cin读取,读取并忽略开头所有的空白字符;读取字符直至再次遇到空白字符,则读取终止。

               string  str ;

               cin >> str ;//

     

         b)未知数目的string对象读取

             string   word;

             while( cin >> word)

             {

                   //process

             }

     

        c)用getline读取整行文本,从输入流中的下一行读取,并保存读取的内容到string对象,但不包括换行符。getline并不忽略行开头的换行符,遇到换行符,则停止读入并返回。(getline 函数返回时,丢弃换行符,换行符将不会存储在string对象中。)

             string line;

             while( getline ( cin, line ) )

             {

                   //process,注意line中不包含换行符,若需换行,则要自行添加。

             }

     

        d)两个string对象相加的注意事项

          进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型。

     

        e)从string对象中获取字符

         string str( "some string" );

         for( string::size_type ix = 0; ix != str.size() ; ++ix)

              cout<<str[ix]<<endl;

     

        f)从文件中读取字符串(今后补充下,现在写不出代码)

          fstream openfile( "filename" );

          string str_line

          while( getline ( openfile, str_line) )

          {

                

          }

        g)size成员函数来获取string的大小。

         for ( string::size_type index =0; index != s.size() ; ++index )


    3、vector类型

        包含的头文件 #include <vector>

                            using std::vector;

        1)vector对象的一个重要属性就在于可以在运行时高效地添加元素。

        2)vector中添加元素的方法:

              使用push_back(),push_front()等成员函数;

             

        3)vector访问其元素

        a)下标操作,必须是已存在的元素才能用下标操作符进行索引,通过下标操作进行赋值时,不会添加任何元素。

              vector<int>  ivec;

              for( vector<int>::size_type ix = 0; ix != ivec.size() ; ++ix )

              {

                     ivec[ix]=0;                       //给元素赋值

                     ivec.push_back(ix);         //添加元素

              }

        b)使用迭代器 (iterator)

             vector<int> ivec;

             for( vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++ivec )

             {   //ivec.end() 返回的迭代器指向vector的“末端元素的下一个”。

                  //通常称为超出末端迭代器,指向一个不存在的元素。

                     *iter=0;           //等价于ivec[ix]=0;

              }

       

        c)const_iterator类型,只能用于读取容器内的元素,但不能改变其值。

       

        4)vector与数组的比较

           a)数组的长度是固定的,而且程序员无法知道一个给定数组的长度。

           b)数组不提供自动添加元素的功能,如果需要更改数组的长度,只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组的空间。

           c)只有当性能测试表明使用vector无法达到必要的速度要求是,才使用数组。


    4、标准库bitset类型

         包含的头文件: #include <bitset>

                               using std::bitset;

         1)bitset对象的定义和初始化

           bitset<32> bitvec;   //32bits,all zero。

         2)初始化

           用unsigned值初始化bitset对象,bitset类型长度大于unsigned long值的二进制位时,高位将置0;小于时,则截断处理。

           用string对象初始化bitset对象,string对象直接表示为为模式。从string对象读入位集的顺序是从右到左。

           eg: string str( "1111110000011100010" );

                    bitset<32> bitvec5( str, 5, 4 );//从str[5]开始包含4个字符的字串来初始化bitvec5.

         3)bitset对象上的操作

           b.any();             b.none();   b.count();        b.size();                 b.set();             b.to_ulong();        os<<b;

     

           b.count()返回的是size_t类型,size_t类型定义在<cstddef>头文件中。

           b.to_ulong() 用b中同样的二进制位返回一个unsigned long值。

          

     

          

           

     

         

     


    最新回复(0)