3、字符串、向量、数组

来源:互联网 发布:淘宝达人申请 编辑:程序博客网 时间:2024/06/06 00:18

1、使用using声明就无需专门的前缀(如std::)。头文件不应包含using声明

#include <iostream>using std::cin;using std::cout;using std::endl;int main(){    cout << "Enter two numbers:" << endl;    int v1 = 0, v2 = 0;    cin >> v1 >> v2;    cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;    return 0; }

2、string:标准库类型string表示可变长的字符序列。

#include <string>using std::string;int main(){       //字符串初始化    string s1("11111cccc");    string s2(4,'a');//s2="aaaa"    string s3 = s1 + "123";//可以    string s4 = "123" + "avd";//不可以直接加两个字面值}

3、string对象操作
这里写图片描述

(1)getline读取一行,保留输入时的空格

int main(){    string line;    while(getline(cin, line))        cout << line <<endl;    return 0;}

(2)s.size()返回的是一个无符号整数,string::size_type类型值,size_type在类string中定义

(3)字符串字面值和string是不同的类型!!!

(4)C语言头文件xx.h,C++兼容但是名字改为cxx;c代表是源c语言中文件

//遍历字符串forstring str("Abcdefg");    for(auto &c : str)        c = toupper(c);//c是引用,操作c就是直接操作str    cout << s <<endl;

4、vector表示对象的集合,是容器的一种

#include <vector>using std::vector;

(1)初始化,vector下标类型也是size_type

vector<int> a(10,8);//10个int元素都被初始化为8vector<string> p={"1","ab","title"};

(2)添加元素xx.push_back,尾部插入。下标可以访问已存在的元素,但是不能在初始化为空的vector中用下标插入元素。

//从键盘输入元素压入string word;vector<string> text;while(cin >> word)    text.push_back(word);

5、迭代器iterator,指针是一种迭代器,支持访问容器中一个元素到另一个元素操作
xx.begin() 返回第一个元素的迭代器
xx.end()返回尾元素下一个位置的迭代器

//把字符串第一个字母边长大写string s("somebody");if(s.begin() != s.end()){    auto it = s.begin();    *it = toupper(*it);}

C++在循环中习惯于使用!=,因为所有标准库容器都定义了==和!=,但是他们中的大多数没有定义<运算。凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

6、数组,不确定元素个数用vector
(1)定义数组类型不允许使用auto
(2)复杂的数组声明,由内向外,由右向左
(3)数组下标类型为size_t

int *ptrs[10];      //10个指针的数组int (*a)[10]=&b;    //a指向一个含有10int元素的数组int *(&c)[8] = ptr; //c是一个数组的引用,该数组有10个指针int a[] = {0,1,2,3,4};auto b(a);          //b是一个指针,指向数组a的第一个元素//把row定义成一个含有4个整数的数组的引用,然后将其绑定到ia的第二行。int (&row)[4] = ia[1];

(4)auto和decltype的使用能够避免在数组前面加上一个指针类型。

int a[3][4];int (*p)[4] = a;        //p指向含有4个整数的数组p = &a[2];//外层一行一行变换,p指向含有4个整数的数组,每行首地址,auto p = begin(a)这时p是个二级地址for(auto p = begin(a); p != end(a); ++p)    for(auto q = begin(*p); q != end(*p); ++q)        cout << *q << '';cout << endl;