C++复试第三篇:字符串、向量和数组

目录

一、命名空间的using声明

二、 string

  三、 vector 

四、数组


一、命名空间的using声明

1.     目前大多数库函数都来源于 命名空间std,e.g:cin、cout

        使用using就不用再加前缀了,头文件不应该加using

#include<iostream>
using std::cin;

int main(){
    int i;
    cin >> i;
    return 0;
|main函数必须返回int类型的数
}

2.     标准库类型string表示可变长的字符序列,string包含在命名空间std中,所以都先这样实现声明:

#include <string>
using std::string; 

|初始化一个空字符串
string s1;


|直接初始化一个除了空字符的串
string s2("value");

|拷贝初始化
string S3 = "hiya";


|初始化一个由连续n个字符c组成的串
string s3( n, 'c');

二、 string

     1. string的读写:自动去除空白(空格、换行符、制表符...),遇到空白停止 

     2. 持续读写:while(cin >> word)

     3. 使用getline读取一整行,保留空白符

     4. empty判空,size判断长度

#include <string>
using std::string;

main(){
    while (getline(cin, line))
        if (!line.empty())
            cout << line << line.size() << endl;
}

     5. string的比较( == 、!= 、>、< ...)是大小写敏感的,若对应位置的字符不同,则> <结果是看第一个不同的字符的结果

     6. 字符值和string对象相加,必须确保“ + ”两边至少一个string对象

string s2 = "world";

|错!hello和,都是字面值
string s = "hello" + ',' + s2;

    7. 改变字符串中的字符

        ◇ 必须使用 “ & ”引用,以改变s 的值

        ◇ 用“ auto ”让编译器来决定c的类型,这里就是char

string s("Hello World");

for (auto &c : s)
    c = toupper(c);
cout << s <<endl;

| HELLO WORLD

     8. 利用下标:size_type 执行 随机访问;转16进制

|不打算改变,所以设为常量
const string hexdigits = "0123456789ABCDEF";
cout << "Enter a series of numbers between 0 and 15" << endl;
string result;
string :: size_type n ;  //用于保存输入的数字

while (cin >> n) //只要持续输入
    if(n < hexdigits.size())
        result += hexdigits[n];
cout << "number" << result << endl;

        9. 

        strlen(p)                           返回p的长度

        strcmp(p1 ,p2 )                比较大小

        strcat(p1 ,p2 )                  把p2连接到p1上

        strcpy(p1 ,p2 )                  将p2拷贝给p1,返回p1

三、 vector 

          vetor = 容器,是一个类模板,模板本身不是类或者函数,生成类或函数的过程称作实例化,实例化的过程需要指定类型

       1. 经常会先定义一个空vector,然后运行时再往里加,指定vector的类型

vetor<string>   svec;

        2.  直接初始化

           ◇ 列表初始化:只能用花括号;

           ◇ 圆括号是用来指定vector的容量的,所有元素都一样

           ◇ 一个vector是另一个的副本

#include <vector>
#include <string>
using std::vector;
using std::string;

|列表初始化
vector<string> v1{"a" , "an" , "the"};

|设置容量和元素的初值
vector<int> v3(10 ,1) //v3中有10个元素,每个的值都是1

        3. push_back()函数:读取未知数量的元素

#include <string>
#include <vector>
#include <iostream>
using std::string;
using std::vector;
using std::cin;


string word
vector<string> t;
while(cin >> word){
    t.push_back(word)
}

        4. 非空vector可以直接利用下标访问,空vector只能用push_back()

vector<unsigned> socres(11,0)
cin >> grade;
++scores[grade/10]

vector<int> invec;
cin >> ix;
ivec.push_back(ix);

         5. 使用数组初始化vector对象

#include <vector>
#include <iterator>

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

四、数组

        1.  数组不允许拷贝和赋值

int a[] = {0 ,1 ,2 };
|不允许使用一个数组初始化另一个
int a2[] = a;
|数组不允许赋值
a2 = a; 

        2. 指针和数组

             ◆ 用下标得到数组的指定元素

string nums[] = {"one" ,"two" ,"three" };
string *p = &nums[1];

            ◆ 自动转化为指向数组的first元素

string nums = {"one" ,"two" ,"three"};
string *p2 = nums;

            ◆ 利用标准库函数 begin() 和 end()获得指向首元素的指针和指向尾元素的指针


#include <iostream>
#include <iterator> //begin和end函数定义在iterator文件中
using namespace std;

int ia[] = {0,1,2,3,4,5,-10,6,7,8};
//begin函数返回指向ia首元素的指针,end函数返回指向ia尾元素下一位置的指针。
int *beg = begin(ia); 
int *last = end(ia);

        3. 指向多维数组的指针

int a[3][4];
|p指向含有4个int的数组
int (*p)[4] = a;

|≠ int指针的数组
int *ip[4];

|这里指向a的最后一行
p = &a[2];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值