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 ...
随机推荐
- $P2299 Mzc和体委的争夺战$
\(problem\) #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; typedef long lon ...
- 题解报告:hdu 1564 Play a game(找规律博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1564 Problem Description New Year is Coming! ailyanlu ...
- [转]linux下ulimit命令详解
转自:http://blog.chinaunix.net/uid-23842323-id-2656582.html 1,说明:ulimit用于shell启动进程所占用的资源.2,类别:shell内建命 ...
- JS——sort
1.a-b升序 <script> var arr = [2, 3, 1, 5, 0]; function compare(a, b) { return a - b; } console.l ...
- 3星|《管理十诫》:十年前可口可乐退休CEO的一生管理经验总结
管理十诫:影响你一生的管理哲学 英文书应该是2008年出版的.国内出版过几个译本. 作者是可口可乐CEO.本书是他从可口可乐CEO退下来后写的管理经验总结.作者总结了11条CEO不应该做的事.这11条 ...
- 关于Qt 报QDomDocument: No such file or directory错误解决办法
肯定是没有找到相关的路径,这时候只需要在.pro文件中加入便好了,比如我要用到读写xml的一些头文件,则需要在.pro中加入如下代码: 就可以正常引用了.
- Quartz实战
https://my.oschina.net/yinxiaoling/blog/542336?fromerr=s3ko7u33 Quartz实战 > 一.内存型(1) <bean name ...
- S-HR之时间空间配置
<field name="entrys.bizDate" dataType = "DATE" label="生效日期" year ...
- stress工具使用指南和结果分析
stress介绍 #stress `stress' imposes certain types of compute stress on your system Usage: stress [OPTI ...
- [Luogu] P1233 木棍加工
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...