string 和 vector 初探
标准库类型 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 初探的更多相关文章
- POJ 3096 Surprising Strings(STL map string set vector)
题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...
- 编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个对立的元素存于vector中
#include<iostream> #include<string> #include<vector> #include<fstream> using ...
- std::string,std::vector,std::accumulate注意事项
在用string做字符串拼接时,会发现随着string的增大越来越慢,原因主要是string(和vector)是基于现行内存的数据结构,在海量数据时,经常会申请新的一块内存,把原有的数据拷贝过去然后再 ...
- Q&A:string、vector、iterator、bitset
细节要点 getline(cin,string)与cin>>string 在VS2013中通过输入换行符\n,对getline以及cin的用法进行测试,但是并没有像文中所述遇到换行符停止读 ...
- 谈谈两种标准库类型---string和vector
两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...
- LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)
翻译 给定两个字符串s和t,决定它们是否是同构的. 假设s中的元素被替换能够得到t,那么称这两个字符串是同构的. 在用一个字符串的元素替换还有一个字符串的元素的过程中.所有字符的顺序必须保留. 没有两 ...
- C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器
课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...
- 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)
string.vector 互转 string 转 vector vector vcBuf;string stBuf("Hello DaMao!!!");----- ...
- string和vector
一.String对象 1.string s; s.size(); //返回的是s中字符的个数,也是s的长度: //string对象最后没有加空字符 //size()返回的是string::s ...
随机推荐
- 15年用canvas画的
请恕我当年的工作太轻松,用canvas手打了一个图,技术含量并没有什么,现在看看,甚是怀念_(¦3」∠)_ <!DOCTYPE html> <html> <head&g ...
- ansible 显示运行时间
#独家秘诀cd /etc/ansible mkdir callback_plugins cd callback_plugins wget https://raw.githubusercontent.c ...
- 常用的Axure操作方法(1)
1. 保存原型图片到本地,如在网页上看到图标素材,好多个在一张图上. 如上图所示,将图片拖入axure中,利用分割或者裁剪,把小图标 ...
- Android 将图片网址url转化为bitmap
public Bitmap returnBitMap(final String url){ new Thread(new Runnable() { @Override public void run( ...
- IE9的F12工具,"网络"页签,点击"开始捕获"之后,请求显示的状态是"挂起"的分析和解决
最近一个项目,客户端使用用jQuery编写ajax请求,服务端采用struts2框架.js发送请求和action处理请求过程中,遇到一个问题.刚开始觉得问题很诡异,仔细定位很久之后才发现问题,虽然问题 ...
- VS2013支持多字节
使用插件 下载地址:https://www.microsoft.com/zh-cn/search/DownloadResults.aspx?rf=sp&q=mbcs
- eclipse版本和jdk的版本兼容问题
eclipse也是有版本的,当版本过低时,无法兼容高版本的jdk 项目中用的是jdk1.8,但是低版本的eclipse只能选到jdk1.7,导致java文件在编译的过程中,不识别1.8版本jdk的语法 ...
- id拼接保存到单个字段后作为表连接的查询条件
SELECT q.id, concat(q. NAME) qname, d.id did, d. NAME FROM question_po q LEFT JOIN data_configuratio ...
- day06-数字类型、字符串类型内置方法
目录 数字类型内置方法 字符串类型内置方法 有序 or 无序 可变 or 不可变 数字类型内置方法 1. int()强制类型转化成整型 age_str = '18' # 定义字符串 age = int ...
- Java中面向对象三大特性之——多态
多态的概述: 多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类和飞机,飞起来也是不一样的.可见,同一行为,通过不同 ...