C++:标准库类型

 C++变量类型
       基本类型
                int
                double
                ...
       复合类型
                引用
                指针
                const
       标准库类型
                string
                vector
                迭代器
       内置数组
                一维数组
                多维数组

using声明

用到相应的库函数要首先声明,如要使用cin,就要从std命名空间中获取它。
    using namespace::name
    using std::cin;
    using std::string;
    using std::vector;

标准库类型string

1,使用string类型前

必须包含下面代码:

    #include <string>
    using std::string;

2,定义和初始化string对象

    string s1("abd");
    string s1="abd";
    string s1=(3,'c');//s1为"ccc"。

3,string对象上的操作

    getline(is,s)//从istream对象is中读取一行(用到换行符结束)赋给s,返回is。
    s.empty()
    s.size()//返回s中字符的个数,返回类型为string::size_type
    s[n]//n从0开始
    s1+s2//连接起来
    s1==s2//完全相等,区分大小写
    <,>,<=,>=//按字典顺序比较,区分大小写

4,处理string对象中的字符

    isalnum(c)//当c是字母或数字时为真。
    isalpha(c)//字母
    isdigit(c)//数字
    ispunct(c)//标点
    isspace(c)//空格,回车,制表符,换行符

    isupper(c)//大写字母
    islower(c)//小写字母
    tolower(c)//大写————>小写
    toupper(c)//小写---->大写

常见用法:
1,计算string对象中的标点个数,把s中的每个字符分别

复制给c。

这里写图片描述

2,改变字符串中的字符

这里写图片描述

标准库类型vector

1,使用vector

    需包含:
        #include <vector>
        using std::vector

    vector是模板而不是类型,有vector可以生成其他类型,但需要给一些提示哈。如<>尖括号里面的:

        vector<int> vec1={4,2,79,333};
        //vec1包含4个int元素
        vector<string> vec2={"adf","af",did""};
        //列表初始化,vec2包含三个字符串元素
        vector<vector<string>> vec3;
        //vec3保存vector<string>类型的对象

向vector对象中添加元素

    vector<int> v1;
    for (int i = 0; i != 100; i++)
    {
        v1.push_back(i);//依次把整数值放到v1末端
    }

    vector<string> v2;
    string s1;
    while (cin >> s1)//输入的s1都被放在v2
        v2.push_back(s1);

vector操作

    v.empty()
    v.size()//返回元素类型是vector<基本类型>::size_type
    v.push_back(t) 
    v[n]//返回v中第n个位置上元素的引用,n从0开始,也为相应的size_type类型
    v1==v2//元素完全相等
    v1=v2//赋值

迭代器

我们已知知道可以使用下标运算符来访问string对象的字符或vector对象的元素,还有另一种更通用的方法就是迭代器。
就迭代器而言,其对象是容器中的元素,使用迭代器可以访问某个元素。迭代器有有效和无效之分,有效的迭代器指向某个元素或者尾元素的下一个位置。
迭代器成员拥有begin和end成员。
auto b=v.begin(),e=v.end();//b,e
分别指向第一个元素和尾后元素

1,迭代器运算符

    *iter//返回迭代器iter所指元素的引用
    iter->mem//解引用并获取该元素的名为mem的成员,等价(*iter).mem
    ++iter//下一个元素
    --iter
    iter1==iter2//指示同一个元素
    iter1!=iter2//会经常用到,要养成习惯

2,迭代器类型

    迭代器类型如下:
    vector<int>::iterator it;
    string::iterator it;
    vector<int>::const_iterator it;
    string::const_iterator it;

迭代器类型:总与容器类型相关,一般情况下,无须知道其精确类型,养成用!=的习惯。
for(auto it=s.begin();it!=s.end()&&!isspace(*it);++it)
    *it=toupper(*it)
//依次处理s中的每个字符,小写转为大写

auto c=it1-it2//返回迭代器it1和it2的距离,c的类型difference_type

使用迭代器实现二分搜索算法

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    //二分搜索算法
    int sought = 21;//要寻找的数
    vector<int> v;
    for (int i = 0; i < 100; i++)
    {
        v.push_back(i);//v={0,1,2...99}
    }
    auto b = v.begin(), e = v.end();
    auto mid = b + (e - b) / 2;
    while (mid != e&& *mid != sought)
    {
        if (sought < *mid)
            e = mid;
        else
            b = mid + 1;
        mid = b + (e - b) / 2;
        cout << *mid << endl;
    }
    return 0;
}
运行结果依次输出25,12,19,22,21

数组

数组和C风格字符串都是C语言的产物,C++尽量不要使用吧。
数组是一种类似于标准库vector类型的数据结构。但数组大小固定。

int *ptr[10];//ptr是含有十个整型指针的数组
int (*ptr)[10];//ptr是一个指针,指向含有十个整数的数组

默认情况下,类型修饰符从右向左一次绑定,有括号从内向外。
数组下标的类型size_t,指针相减的结果的类型为ptediff_t,都在cstddef头文件中定义了这些类型。

例子:输出数组的程序
#include <iostream>
using namespace std;

//数组形参
//在不知道数组元素个数的情况下,打印数组中的每个元素
//方法一:使用数组的begin和end 函数
//结果为输出1,3,4,5
void print1(const int *beg, const int *end)
{

    while (beg != end)
        cout << *beg++ << endl;
}

int main()
{
    int a[4] = { 1,3,4,5 };
    int *b = begin(a);
    int *e = end(a);
    print1(b, e);
    return 0;
}

C风格字符串

C语言一般把字符串放在字符数组中,并以空字符串结束。

string s1="hello!";//s1包含6个字符
consr char s2[]="hello!";//s2包含7个字符

一般情况下还是使用标准库string类型比较好。
但是接口还是需要的,怎么把string对象转为const char*呢?

char *str=s1;//错误,不能把string对象赋值给const char*
char *str=s1.c_str();//正确,

c_str()的返回值是一个C风格的字符串。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值