3、字符串、向量、数组

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语言中文件

//遍历字符串for
string 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元素都被初始化为8
vector<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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值