码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-09-21 15:42:34      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

一、string

1、包含头文件string; 命名空间std

#include<string>
using std::string

2、读取操作时,string对象会自动忽略开头的空白,直到遇到下一个空白

如果想要保留空白,使用getline函数:读到换行符为止,但不把换行符写入到string中

string s1, s2, s3;
cin >> s1 >> s2;            //输入“    hello  world   ”
cout << s1 << s2 << endl;        //得到“helloworld”

getline(cin, s3);            //输入 “   hello world   ”
cout << s3 << endl;            //得到 “   hello world   ”

3、string 可以得到长度,使用size()函数,返回的是一个无符号型整数,所以要注意在用于循环判断时不要与有符号数一起使用

4、string对象的比较,先会比较长度,如果相同,再比较第一个相异的字符

5、string对象的相加:+号两边必须有一遍是string类型

6、通常C++程序的头文件为cname,而C程序头文件为name.h

7、范围for

for(declaration : expression)  //每次迭代,declaration部分会被初始化为expression部分的下一个元素
    statement
  • dclaration类型可以用auto;如果要改变expression的值则需要为引用类型
  • string s("Hello World");
    for(auto &c : s)        //定义成引用类型,则可以改变s的值
        c = toupper(c);
    cout << s << endl;

二、vector:对象的集合;是一个类模板

1、初始化

  • 如果用的是圆括号,则为用提供的值来构造vector对象
  • vector <int> v1(10);        //v1有10个元素,每个默认初始化为0
    vector <int> v(10, 1);    //v2有10个元素,每个都初始化为1
  • 花括号,列表初始化vector对象
  • vecotr<string> v3{"hello", "world"};    //用里面的两个值列表初始化
    • 直接初始化的方法适用于:初始值已知且数量少;初始值为另一个vector对象的副本;所有元素初始值一样

2、添加元素:v.push_back(t):向尾部添加一个值为t的元素

  • 一旦元素的值不同,则先定义一个空的vector对象,再运行时向其中添加具体值push_back();这样比提前开辟其大小来的效率高

三、迭代器:所有的标准库容器都可以使用迭代器,但是只有string和vector,map支持下标运算符;

1、begin和end成员:end成员返回指向容器”尾元素的下一个位置”

    auto b = v.begin(), e = v.end();        //b和e的类型相同;我们并不在意迭代器的准确类型是什么

2、如果对象只是用于读,而不用写操作则最好使用常量类型,引用cbegin和cend函数

    auto it = v.cbegin()        //类型为vector<int> :: const_iterator

3、解引用迭代器:可获得迭代器所指的对象,如果该对象的类型恰好是类则可以进一步访问成员

    (*it).empty()    ======== it->empty()
  • 使用了迭代器的循环体,不要向迭代器所属的容器添加元素

四、数组

1、C++ 11引入了begin和end的函数,与迭代器的begin,end效果相同

2、C库中的string函数,如strlen,strcmp,strcat,strcpy,传入函数的指针必须以空字符作为结束的数组

3、string类型->const char *类型,使用c_str()函数

    char *str = s;
    const char *str = s.c_str();

4、用数组来初始化vector对象,只需要指明拷贝区域的首元素地址和尾后地址

    int arr[] = {0, 1, 2, 3, 4, 5};
    vector<int> ivec(begin(arr), end(arr));

5、在C++中尽量使用vector和迭代器,避免使用内置数组和指针

 

string和vector的其他内容在后面章节再补充

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

标签:

原文地址:http://www.cnblogs.com/dylqt/p/4826080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!