string 类
#include <iostream>
#include <string>
using namespace std;
int main()
           string s1,s2;
          cin>>s1>>s2;
          cout<<s1<<s2<<endl;

    return 0
}
如果相对string对象中的每个字符做点儿 什么操作,目前最好的办法是使用C++11新提供的一种语句:范围for(range for)语句。这种语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:
for (declaration :expression)
      statement
#include <iostream>
#include <string>
using namespace std;
int main()
           //string s1,s2;
           //cin>>s1>>s2;
           //cout<<s1<<s2<<endl;
           string str( "some string");
           for( auto c:str)
                   cout<<c<<endl;
    return 0;
}
使用基于for语句处理每个字符是一个好的方式,要想访问string对象中的字符有两种方式:一种是使用下标,另外一种是使用迭代器;
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s("some string");
           if(!s.empty()) //确保确实有字符需要输出;
                   s[0] = toupper(s[0]); //将字符“some string”中第一个字符s改成大写;
          cout<<s[0]<<endl<<s<<endl; //输出大写S,以及改完以后的字符串“Some string”;
           return 0;
}


标准库类型vector
标准库类型vector表示对象的集合,其中所有的对象的结合都相同;
以vector 为例,提供额外的是vector内所存放对象的类型;
vector <int> ivec; //ivec 保存int类型的对象;
vector<Sales_item> Sales_vec;//保存Sale_item类型的对象;
vector<vector<string>> file;//该向量的元素vector对象;

vector初始化
可以用vector对象容纳的元素数量和所有元素的同意的初始值来初始化vector对象:
vector<int>  ivec(10,-1)//10个int类型的元素,每个都被初始化为-1;
vector<string>  svec(10,"hi !");//10个string类型的元素,每个都被初始化为"hi!";
vector<int>    ivec(10);//10个元素,每个都被初始化为0;
vector<string>  svec(10);//10个元素,每个都是空string对象;
vector<int>  v1{10};//v1有一个元素,这个元素的值是10;



#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    vector<int> ivec;
             int i;
            cout<< "请输入数字(输入-1退出)\n" ;
             while(1)
            {
                        cin>>i;
                         if(i == -1)
                                     break;
                        ivec.push_back(i);
            }
             if(ivec.empty())
            {
                cout<< "this vector is empty "<<endl;
                         return -1;
            }
             else if (ivec.size() == 1)
            {
                        cout<< "没有相邻的元素" <<endl;
                         return -2;
            }
             else
            {
                for( decltype(ivec.size()) i = 0;i != ivec.size()-1;++i)
        cout<< "相邻两个整数的和:" <<ivec[i] + ivec[i+1]<<endl;
            }
             int x = 0;
             int y = ivec.size()-1;
             while(1)
            {
                if(x > y)
                                     break;
                        cout<<ivec[x]+ivec[y]<<endl;
                        x++;
                        y--;
            }
            
             return 0;
}

迭代器(iterator)
迭代器类型
1)类似于指针,迭代器也提供了对对象的间接访问,和指针不一样的是,或缺迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。
auto b = v.begin(),e = v.end();  //由编译器决定b和e的类型,b表示v的第一个元素,e表示v尾元素的下一位置
2)就想不知道string和vector的size_type成员,到底是什么类型一样,一般来说我们也不知道(其实也无需知道)迭代器的精确类型,而实际上那些拥有迭代器的标准库类型使用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只能读字符,不能写字符



结合解引用和成员访问操作
解引用迭代器获得迭代器所指的对象,如果该对象的类型恰好是类,就有可能希望进一步访问它的成员。例如,对一个由字符串组成的vector对象来说,要想检查元素是否为空,令it是该vector对象的迭代器,只需检查it所指字符串是否为空就可以,代码如下:
(*it).empty();//解引用it,然后调用结果对象的empty成员;
*it.empty();//错误:试图访问it的名为empty的成员,但it是个迭代器,没有empty成员;

范围for语句
如果想对string对象中的每个字符做点儿什么操作,目前最好的办法就是使用C++11新标准提供的一种语句:范围for语句。
举个稍微复杂点的例子,使用范围for语句和ispunct函数来统计string对象中标点符号的个数:
string s("Hello World!!!");
//punct_cnt的类型和s.size的返回类型一样;
decltype(s.size()) punct_cnt = 0;
for(auto c : s)
    if(ispunct(c))
       ++punct_cnt;
cout<<punct_cnt<<" punctuation characters in "<<s<<endl;

输出结果为:3 punctuation characters in Hello World!!!

string 类
#include <iostream>
#include <string>
using namespace std;
int main()
           string s1,s2;
          cin>>s1>>s2;
          cout<<s1<<s2<<endl;

    return 0
}
如果相对string对象中的每个字符做点儿 什么操作,目前最好的办法是使用C++11新提供的一种语句:范围for(range for)语句。这种语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:
for (declaration :expression)
      statement
#include <iostream>
#include <string>
using namespace std;
int main()
           //string s1,s2;
           //cin>>s1>>s2;
           //cout<<s1<<s2<<endl;
           string str( "some string");
           for( auto c:str)
                   cout<<c<<endl;

    return 0;
}
使用基于for语句处理每个字符是一个好的方式,要想访问string对象中的字符有两种方式:一种是使用下标,另外一种是使用迭代器;
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s("some string");
           if(!s.empty()) //确保确实有字符需要输出;
                   s[0] = toupper(s[0]); //将字符“some string”中第一个字符s改成大写;
          cout<<s[0]<<endl<<s<<endl; //输出大写S,以及改完以后的字符串“Some string”;
           return 0;

}


标准库类型vector
标准库类型vector表示对象的集合,其中所有的对象的结合都相同;
以vector 为例,提供额外的是vector内所存放对象的类型;
vector <int> ivec; //ivec 保存int类型的对象;
vector<Sales_item> Sales_vec;//保存Sale_item类型的对象;
vector<vector<string>> file;//该向量的元素vector对象;

vector初始化
可以用vector对象容纳的元素数量和所有元素的同意的初始值来初始化vector对象:
vector<int>  ivec(10,-1)//10个int类型的元素,每个都被初始化为-1;
vector<string>  svec(10,"hi !");//10个string类型的元素,每个都被初始化为"hi!";
vector<int>    ivec(10);//10个元素,每个都被初始化为0;
vector<string>  svec(10);//10个元素,每个都是空string对象;
vector<int>  v1{10};//v1有一个元素,这个元素的值是10;



#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    vector<int> ivec;
             int i;
            cout<< "请输入数字(输入-1退出)\n" ;
             while(1)
            {
                        cin>>i;
                         if(i == -1)
                                     break;
                        ivec.push_back(i);
            }
             if(ivec.empty())
            {
                cout<< "this vector is empty "<<endl;
                         return -1;
            }
             else if (ivec.size() == 1)
            {
                        cout<< "没有相邻的元素" <<endl;
                         return -2;
            }
             else
            {
                for( decltype(ivec.size()) i = 0;i != ivec.size()-1;++i)
        cout<< "相邻两个整数的和:" <<ivec[i] + ivec[i+1]<<endl;
            }
             int x = 0;
             int y = ivec.size()-1;
             while(1)
            {
                if(x > y)
                                     break;
                        cout<<ivec[x]+ivec[y]<<endl;
                        x++;
                        y--;
            }
            
             return 0;

}

迭代器(iterator)
迭代器类型
1)类似于指针,迭代器也提供了对对象的间接访问,和指针不一样的是,或缺迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。
auto b = v.begin(),e = v.end();  //由编译器决定b和e的类型,b表示v的第一个元素,e表示v尾元素的下一位置
2)就想不知道string和vector的size_type成员,到底是什么类型一样,一般来说我们也不知道(其实也无需知道)迭代器的精确类型,而实际上那些拥有迭代器的标准库类型使用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只能读字符,不能写字符



结合解引用和成员访问操作
解引用迭代器获得迭代器所指的对象,如果该对象的类型恰好是类,就有可能希望进一步访问它的成员。例如,对一个由字符串组成的vector对象来说,要想检查元素是否为空,令it是该vector对象的迭代器,只需检查it所指字符串是否为空就可以,代码如下:
(*it).empty();//解引用it,然后调用结果对象的empty成员;
*it.empty();//错误:试图访问it的名为empty的成员,但it是个迭代器,没有empty成员;

范围for语句
如果想对string对象中的每个字符做点儿什么操作,目前最好的办法就是使用C++11新标准提供的一种语句:范围for语句。
举个稍微复杂点的例子,使用范围for语句和ispunct函数来统计string对象中标点符号的个数:
string s("Hello World!!!");
//punct_cnt的类型和s.size的返回类型一样;
decltype(s.size()) punct_cnt = 0;
for(auto c : s)
    if(ispunct(c))
       ++punct_cnt;
cout<<punct_cnt<<" punctuation characters in "<<s<<endl;

输出结果为:3 punctuation characters in Hello World!!!

笔记:C++学习之旅 ---string 类、vector和迭代器的更多相关文章

  1. 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式

    在我的博客<我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法,地址:http://blog.csdn.net/ouyang_pen ...

  2. java学习之路--String类的基本方法

    String类常见的功能 获取 1.1 字符串中包含的字符数,也就是获取字符串的长度:int length(); 1.2 根据位置获取某个位置上的字符:char charAt(int index) 1 ...

  3. 我的Java开发学习之旅------>工具类:Java使用正则表达式分离出字符串中的中文和英文

    今天看到一个工具类使用正则表达式将一大段字符串中的中文和英文都分离出来了,在此记录一下,读者可以收藏! import java.util.ArrayList; import java.util.Col ...

  4. 我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值

    ps:这几天本人用百度云盘秒传了几部大片到云盘上,几个G的文件瞬秒竟然显示"上传成功"!这真让我目瞪口呆,要是这样的话,那得多快的网速,这绝对是不可能的,也许这仅是个假象.百度了一 ...

  5. 笔记-JavaWeb学习之旅5

    CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...

  6. 笔记-JavaWeb学习之旅19

    Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...

  7. 笔记-JavaWeb学习之旅16

    增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...

  8. 笔记-JavaWeb学习之旅10

    Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...

  9. 笔记-JavaWeb学习之旅13

    验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...

  10. 笔记-JavaWeb学习之旅12

    会话技术 Cookie:客户端会话技术,将数据保存到客户端 package com.data.Cookie; import javax.servlet.ServletException; import ...

随机推荐

  1. 用C#语言实现记事本

    一.实验内容: 二.记事本所需功能: (1)记事本程序具有文件的新建.打开.保存功能: (2)文字的复制.粘贴.删除功能:字体类型.格式的设置功能: (3)查看日期时间等功能,并且用户可三根据需要显示 ...

  2. JSP中动态include和静态include的区别

    a.静态include:语法:<%@ include file="文件名" %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护. ...

  3. __declspec(dllimport) 和 __declspec(dllexport)的使用详解、以及 XX_API 的含义

    1. C++代码里调用别人的库.或者写库给别人用.大概有如下的方法(只讨论windows系统的情况): ---- a) 提供头文件 h . 静态库 lib  -- > 静态链接 ---- b) ...

  4. vue3.0的生命周期函数

    stetup(){}在 生命周期函数 系列中的优先级 〇setup(){ //优先级最高 处于created生命周期之前的函数,是无法访问data,methods中的数据是无法访问到的,setup中的 ...

  5. MySql 入门——日期计算

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等 SELECT TIMESTAMPDIFF( ...

  6. U-boot分析之编译体验

    1. 如图可以看到的是PC和嵌入式系统的区别 PC第一步是上电,进入BIOS而嵌入式系统进入bootloader 接着进入操作系统而嵌入式式进入Linux内核 PC识别C盘,D盘,而嵌入式系统则挂载根 ...

  7. Drf_序列化and反序列化基础

    序列化类 from rest_framework import serializers class BookSerializer(serializers.Serializer): # 要序列化的字段 ...

  8. MGF multivariate generating function 多变量生成函数

    目录 MGF多变量生成函数multivariate generating function 定义 例子 Extremal parameters III.8.1 largest components 例 ...

  9. 这样封装echarts简单好用

    为什么要去封装echarts? 在我们的项目中,有很多的地方都使用了echarts图表展示数据. 在有些场景,一个页面有十多个的echarts图. 这些echarts只是展示的指标不一样. 如果我们每 ...

  10. NoSQL之 Redis配置与优化

    目录 一.缓存概念 1.1 系统缓存 1.1.1buffer与cache 1.2 缓存保存位置及分层结构 1.2.1 DNS缓存 1.2.2 应用层缓存 1.2.3数据层缓存 1.2.4 硬件缓存 二 ...