• 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • "新经济形势下金融创新的变革与机遇"论坛 2019-03-06
  • 频道栏目
    神奇公式秒杀全国11选5 > 程序开发 > 软件开发 > C++ > 正文
    C++基本语言-字符串string、向量vector和数组实例介绍
    2018-07-28 16:17:40         来源:weixu1999的博客  
    收藏   我要投稿

    神奇公式秒杀全国11选5 www.2zfa.com 第二章介绍内置类型,本章介绍抽象数据类型库。 

    - 其中string和vector是两种最重要的标准库类型,前者支持可变长字符串,后者表示可变长的集合。 

    - 还有一种标准库类型是迭代器,它是string和vector的配套类型,常被用于访问string中的字符和vector中的元素。

    第三章 字符串、向量和数组

    头文件不应包含using声明。

    标准库类型string

    #include <string>

    using std::string

    初始化string

    直接初始化(direct initialization)

    拷贝初始化(copy initialization):使用等号 

    string s1;

    string s2(s1);

    string s2 = s2;

    string s3("hiya");

    string s3 = "hiya";

    string s4(10, 'c'); //s4的内容是cccccccccc

    string对象上的操作

    1. cout << s

    2. cin >> s         //将string对象读入s,遇到空白停止

    3. getline(is, s)   //从输入流is中读取一行赋给s(换行符被读取了,但被丢弃而没有赋给s),返回is

    4. s.empty()        //s为空返回true,否则返回false

    5. s.size()

    6. s[n]             //返回s中第n个字符的引用,位置n从0计起          

    7. s1 + s2          //返回s1和s2连接后的结果

    8. s1 = s2

    9. s1 == s2

    10. s1 != s2

    11. <, <=, >, >=

    逻辑非运算符(?。?/p>

    string::size_type类型:s.size()的返回值类型,是string类的配套类型。它是一个无符号类型的值,能够存放下任何string对象的大小。

    处理string对象中的字符

    cctype头文件:对单个字符的判断或处理的函数

    isupper(c)      //c是大写字母时为真

    islower(c)

    tolower(c)      //如果c是大写字母,则输出对于的小写字母;否则原样输出

    toupper(c)

    isalpha(c)      //c是字母时为真

    isdigit(c)      //c是数字时为真

    isalnum(c)      //c是字母或数字时为真

    ispunct(c)      //c是标点符号时为真

    isspace(c)      //c是空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符的一种)

    iscntrl(c)      //c是控制字符时为真

    isgraph(c)      //c不是空格但可打印时为真

    isprint(c)      //c是可打印字符时为真(即c是空格或具有可视形式)

    isxdigit(c)     //十六进制数

    使用C++版本的C标准库头文件,形如name.h,C++++中这些文件命名为cname,内容一样,且头文件cname中定义的名字从属于命名空间std。

    范围for(range for)语句

    for (declaration : expression)

        statement

    例如:

    string str("some string");

    //每行输出str中的一个字符

    for(auto c : str)

        cout << c <<endl;

    标准库类型vector

    vector是一个类模板(class template)。vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。vector也常被称为容器(container).

    定义和初始化vector对象

    vector<T> v1

    vector<T> v2(v1)

    vector<T> v2 = v1

    vector<T> v3(n, val)

    vector<T> v4(n)

    vector<T> v5{a,b,c...}

    vector<T> v5 = {a,b,c...}

    列表初始化vector对象

    vector<string> articles = {"a", "an", "the"};

    1

    向vector对象中添加元素

    push_back:把一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。 

    vector<int> v2;

    for(int i=0; i != 100; ++1)

        v2.push_back(i);

    运行时才知道vector对象中确切的个数:

    string word;

    vector<string> text;

    while (cin >> word) {

        text.push_back(word);

    }

    vector对象能高效增长:vector能在运行时高效快速地添加元素。

    如果循环体内包含有向vector对象添加元素的语句,则不能使用++范围for++循环。

    其他vector操作

    v.empty()

    v.size()

    v.push_back(t)

    v[n]        //返回v中第n个位置上元素的引用

    v1 = v2

    v1 = {a,b,c...}

    v1 == v2

    v1 != v2

    <, <=, >, >=

    迭代器iterator

    一种通用机制:实现使用下标运算符访问string对象的字符或vector对象的元素。

    类似指针类型,提供了对对象的间接访问。

    begin和end成员

    //由编译器决定b、e的类型

    //b表示v的第一个元素,e表示v尾元素的下一个元素

    auto b = v.begin(), e = v.end();    //b、e类型相同

    end成员返回的迭代器常被称作尾后迭代器(off-the-end iterator),或者简称尾迭代器。

    如果容器为空,则begin和end返回的都是尾后迭代器。

    标准容器迭代器运算符

    *iter           返回迭代器iter所指元素的引用

    iter->men       解引用iter并获取钙元素的名为mem的成员,等价于(*iter).mem

    ++iter

    --iter

    iter1 == iter2

    iter1 != iter2

    //将字符串首字母改成大写

    string s("some string");

    if (s.begin() != s.end()) {

        auto it = s.begin();

        *it = toupper(*it);

    }

    //将迭代器从一个元素移动到另一个元素,把字符串中第一个单词改为大写

    //注意,使用的是!=,而不是<

    for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it)

        *it = toupper(*it);

    #### 迭代器类型

    拥有迭代器的标准库使用iterator和const_iterator来表示迭代器的类型:

    vector<int>::iterator it;           //it能读写vector<int>中的元素

    string::iterator it2;               //it2能读写string对象中的字符

    vector<int>::const_iterator it3;    //it3只能读元素,不能写元素

    string::const_iterator it4;         //it4只能读字符,不能写字符

    点击复制链接 与好友分享!回本站首页
    上一篇:用C语言、C++编写一个迷宫游戏(代码实例)
    下一篇:关于C++中new、operator new和placement new的区别详解
    相关文章
    图文推荐
    点击排行

    关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 神奇公式秒杀全国11选5

    版权所有: 神奇公式秒杀全国11选5--致力于做实用的IT技术学习网站

  • 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • "新经济形势下金融创新的变革与机遇"论坛 2019-03-06