标准库类型 string

string 表示可变长的字符序列。是C++标准库类型的一部分,拥有很多优秀的性能。

定义 string 对象时如未人为初始化编译器会默认初始化为空字符串。

string 对象的初始化有非常多种。大体分为两类:拷贝初始化和直接初始化。

全部用等号(=)的初始化都为拷贝初始化。相反不是等号则为直接初始化。

当初始值仅仅有一个时,拷贝和直接初始化都可,但须要用到多个值的时候,一般来说仅仅能使用直接初始化。

建议尽量使用直接初始化。

string s1;//默认初始化为空串
string s2=s1;//拷贝初始化,s2是s1的副本
string s3(n,"c");//直接初始化,s3为连续n个c构成的字符串

在读取 string 对象时,string 对象会自己主动忽略开头的空白(空格。制表符,运行符等)并从第一个真正的字符開始读取直到遇见下一个空白为止。

getline 函数能够读取一整行包含字符串中的空白。getline函数的參数是一个输入流和一个 string 对象。将输入流中读取的一行字符串存入 string 对象中。当 getline 遇到转行符时就结束并返回结果(getline 是读取转行符的,可是结果中是将转行符丢弃的)。

string line;
while(getline(cin,line))//重复读取输入流,知道遇见结束标志EOF
cout<<line<<endl;输出每一行并手动加入换行操作

string 的 size()(string 类的封装函数) 操作返回 string 对象的长度,返回类型为 string::size_type。这是一个神奇的类型,仅仅知道它是一个无符号整形。而且能存放下不论什么 string 对象的大小。

既然函数返回值是无符号整数就不能与有符号数进行比較。由于当无符号数与负值比較时,负值会自己主动转变为一个比較大的无符号数。使比較结果出错。

string line;
auto len = line.size();//len 是size_type类型,值为0。line 是个空串

string 类定义了比較字符串的运算符。当两个 string 对象全然同样时,这两个string 相等(==);

其它比較如 < ‘。<= 。> ,>= 。string 对象遵循两个原则:

1.当一个string 对象A长度小于 string 对象B长度。且A与B于A长度上的字符皆同样时,A < B。

2.假设两个 string 对象在某些相应的位置上不一致,则string 对象比較的结果是第一个相异字符比較的结果(遵循大写和小写敏感的字典序)。

string str = "Hello";
string phrase = "Hello World";
string slang = "Hiya";
//由规则 1 推断,phrase 大于 str。由规则 2 推断 phrase 大于 str 和 slang

string 对象重载了 + 运算符,通过 + 运算符能够实现 string 与string 。字面值及字符串字面值之间的衔接。

(字符串字面值与 string 是不同的类型)字面值及字符串字面值不能直接相加,由于 + 运算符是封装与
string 类中的。

string s1("Hello") , s2(" World");
string s3 = s1 + s2;//s3 的内容是 Hello World
string s4 = s1 + ',';//s4 的内容是 Hello,
string s5 = s1 + ", World";//s5 的内容是 Hello, World

标准库类型 vector

vector 表示同一种对象的集合。vector 是一个类模板,vector 本身不是类。但却是编译器生成类的说明,当使用模板实例化类时必须指明实例化成何种类型,vector 使用尖括号 <> 来指明实例化类型。vector 能容纳绝大多数对象作为其元素(引用除外。引用不是对象),甚至
vector 本身。

vector 的初始化同 string 同样,另外C++11 还为 vector 加入了列表初始化的方法。用花括号括起来的0个或多个初始元素值被赋给 vector 对象。

vector<string> vs = {"cs","dn"};

列表初始化会给阅读带来混淆,由于列表中的值既能够表示初始值也能够表示元素数量,编译器会首先觉得是列表初始化(将列表中的值当作初始值来处理)。假设不行,才会考虑其它初始化方式。

vector<int> v1(10);//v1有10个元素,都为0
vector<int> v2{10};//v2有1个元素。为10
vector<int> v3(10,1);//v3有10个元素,都为1
vector<int> v4{10,1};//v4有两个元素。10和1
vector<string> v5{"Hello","Hi"};//v5有两个元素,列表初始化
vector<string> v6{10};//v6有10个空串元素

向 vector 中加入元素必须使用 vector 的成员函数 push_back() 。将一个值加入到 vector 的末尾。

不能使用下标运算符。 下标运算符仅仅是用来訪问 vector(string) 对象已存在的元素。下标运算符的使用必须确保其在合理范围内(大于
0 且小于容量)。

vector若要使用 size_type 类型必须明白指出其是由哪一类型定义的。

vector<int>::size_type;//正确
vector::size_type;//错误

vector 对象中元素的仅仅有在元素本身支持比較运算符的基础上才干进行比較(有些自己定义类并未定义比較运算符)。

范围 for 语句

范围 for 语句遍历给定范围内的每个元素。并对序列(序列能够是用花括号括起来的初始值列表。数组,vector,string等对象。这些类型的共同特点是拥有能返回迭代器的
begin 和 end
成员)中的每个元素进行某种操作。使用范围 for 语句能够无需关系是否超出有效范围。

string str("Hello World");
for(auto c : str)//遍历 str 每个字符元素
cout<< c <<endl;

string 和 vector 初探的更多相关文章

  1. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

  2. 编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个对立的元素存于vector中

    #include<iostream> #include<string> #include<vector> #include<fstream> using ...

  3. std::string,std::vector,std::accumulate注意事项

    在用string做字符串拼接时,会发现随着string的增大越来越慢,原因主要是string(和vector)是基于现行内存的数据结构,在海量数据时,经常会申请新的一块内存,把原有的数据拷贝过去然后再 ...

  4. Q&A:string、vector、iterator、bitset

    细节要点 getline(cin,string)与cin>>string 在VS2013中通过输入换行符\n,对getline以及cin的用法进行测试,但是并没有像文中所述遇到换行符停止读 ...

  5. 谈谈两种标准库类型---string和vector

    两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...

  6. LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)

    翻译 给定两个字符串s和t,决定它们是否是同构的. 假设s中的元素被替换能够得到t,那么称这两个字符串是同构的. 在用一个字符串的元素替换还有一个字符串的元素的过程中.所有字符的顺序必须保留. 没有两 ...

  7. C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器

    课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...

  8. 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)

    string.vector 互转 string 转 vector vector  vcBuf;string        stBuf("Hello DaMao!!!");----- ...

  9. string和vector

    一.String对象 1.string s;      s.size(); //返回的是s中字符的个数,也是s的长度: //string对象最后没有加空字符 //size()返回的是string::s ...

随机推荐

  1. Kafka详解与总结(三)

    Kafka分片存储机制 几个kafka重要概念: Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群. Topic:一类消息,例如pa ...

  2. 什么是mycat?

    Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 遵守Mysql原生协议,跨语言,跨平台,跨数据 ...

  3. Unity Android交互过坑指南

    Unity Android交互过坑指南 介于网上看过很多unity和Android交互的教程,都或多或少的漏掉了一些部分,导致编译过程中出现各种问题,特此整理一份教程,仅供参考 介绍 本次实现的是在游 ...

  4. EasyUI系列学习(三)-Draggable(拖动)

    一.创建拖动组件 0.Draggable组件不依赖于其他组件 1.使用标签创建 <div class="easyui-draggable" id="box" ...

  5. 从源码看ASP.NET框架(一)-打造页面控件树

    测试实例如下: 前台代码MyFirstWeb.aspx(没有服务器控件,即没有runat) CodeBehind="MyFirstWeb.aspx.cs":表示代码后置类文件 In ...

  6. ajax不跳转页面的快速删除操作,可添加美观样式

    以前我们讲的删除是利用嵌入php代码,跳转到另一个页面,从而降低了删除速度,但我们今天讲的利用ajax不仅可以达到不跳页面快速删除,并且能添加特效来美化页面. 上代码,我们先来做主页面 <!DO ...

  7. 【译】x86程序员手册01

    Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...

  8. C# Tuple 创建一个新二元集合

    List<string> list1=new List<string>(); List<string> list2=new List<string>() ...

  9. Git学习总结(标签管理)

    在Git中打标签非常简单,首先,切换到需要打标签的分支上: 然后,敲命令git tag <name>就可以打一个新标签: $ git tag v1. 可以用命令git tag查看所有标签: ...

  10. Git环境部署

     部署git 服务器环境   系统环境准备 192.168.30.25   master     git   gitlab 192.168.30.26   client      git 关闭防火墙 ...