zoukankan      html  css  js  c++  java
  • 标准库类型String,Vector

    string对象中每个字符的处理:

    要用到 for(声明:表达式) 语句

    比如简单的打印string str中每一个字符

    ---

    string str("hello world!!!");

    for(auto c: str)cout<<c<<endl;  

    (ps:这里auto 的意思是让编译器自己来决定c变量的类型)

    ---

    再举一个例子统计string str的标点符号数目

    string str("hello world!!!");

    decltype(str.szie()) num_cnt = 0;

    for(auto c : s)

      if(ispunct(c)) ++num_cnt;

    cout<<num_cnt<<" punctuation characters in "<<s<<endl;

    (ps:这里decltype(str.size()) 是代表的str.size()声明类型,而str.size()的类型不是整型,而是一个无符号的其他类型。

    然后使用 ispunct(char c)是包含在头文件cctype里面的。cctype 头文件里面有许多 isalnum判断是否数字,isalpha判断是否字母..etc)

    ----

     那假如希望改变string str的字符呢?而不是仅仅进行统计和输出

    这个例子是将str的全部变成大写字母!

    string str("hello world!!!");

    for(auto &c : str) c=toupper(c)

    cout<<str<<endl;

    (ps: 这里有个小变化for(auto c:str) 变成 for(auto &c:str)! 原来str 的每个字符 是复制给 auto c。所以即使你改变了auto c

    也并没有改变str的每个字符!但是auto &c 没有,这里c是代表str 每个字符的引用而非副本。也就是c 是每个字符的另一个别名而已!

    所以改变c 确实能够改变str 的字符!)

    ---

    假如希望处理访问str 中某个特定的字符

    -

    下标:使用str[x] x是无符号数且小于等于size-1!

    使用一个例子来介绍: 一个将十进制转成16进制的程序

    const string hexdigits="0123456789ABCDEF";

    string result;

    string::size_type n;

    cout<<"enter a series of numbers between 0 and 15 seperately with space"<<endl;

    while(cin>>n)

     if(n<hexdigits.size())

        result+=hexdigits[n];

    cout<<result;

    -

    迭代器:迭代器有点像指针,但又很有区别。在标准类型中从string 到 vector 都支持用迭代器访问容器中的一个元素。

    并且许多其他的标准库定义的容器也支持:使用迭代器访问容器中的一个元素!

    (只有极少数的才支持用下标法来访问容器里元素)

    举个例子:将string容器(或者称string 对象)的第一个元素转变成大写

    string str(hello,you bitch!);

    if(s.begin() != s.end()){ auto it=s.begin(); *it=toupper(*it) ;}

    it 是迭代器, 它指向s容器的第一个元素。它的类型我们不得而知所以命名它auto

    *it 是s容器第一个元素的引用(别名)!

    (

    s.end()指向s容器尾元素下一个位置

    s.begin()指向容器的第一个位置, s.begin==s.end时相当于s容器为空!

    it++ 说明指向s容器的下一个元素

     it-- 说明指向上一个元素

     it->property 说明是元素的某一个属性,相当于(*it).property

    )

    -除了auto c=s.begin() 如何声明一个迭代器呢?

    vector<int>::iterator i1;

    string::iterator i2; 能读,修改 string容器的元素

    vector<int>::const_iterator I1;

    string::const_iterator I2; 仅仅能读string容器的元素

    标准库类型Vector:

    想用vector 先要 #include<vector> using std::vector

    Vector如何初始化?

    Vector支持三种初始化方法。

    一种是用花括号的列表初始化  vector<int> v1{1,2,3}; 说明v1容器里有三个元素,分别是1,2,3

    一种是用括号的元素数目初始化 vector<string> v1(10,"hi"); vector<string> v2(10);说明v1有10个hi的string串,v2有10个空串

    一种是拷贝初始化 vector<string>v1=v2,vector<string>v1(v2)。vector<int> v0 v0是空容器!

    Vector支持什么操作呢?

    最重要Vector支持操作是向Vector添加元素!

    vector<int> v2; //此时是一个空的v2容器

    for(int i=0;i!=100;i++) v2.push_back(i);

    还有其他操作:

    v.empty() 判断空

    v.size() 判断大小

    v.push_back(t)添加元素t如容器V

    v[n]返回容器v的第n个位置引用

    v=v1,v={a,b,c..} 都是用右边的容器替换左边的v容器

    v==v1,v!=v1,v>= > < <=v1 数目相等且每一个元素相等即==,容器之间第一对相异的元素决定容器大小关系!

  • 相关阅读:
    springBoot启动异常 Failed to load ApplicationContext
    mysql存储过程
    springBoot集成Swagger
    groupmems命令:更改和查看组成员 和 usermod命令修改组
    javaBean简介
    Angular获取dom元素,以及父子组建之间相互传值
    Lambda表达式
    坐标转换
    扩展方法
    Binding的Path(路径)
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6377708.html
Copyright © 2011-2022 走看看