C++primer学习笔记(一)——Chapter 3
3.1 Namespace using Declarations
1、因为C++里有名字空间的定义,例如我们使用cin的时候必须写成std::cin,如果就用一次还是可以接受的,但是如果一直都这样,那就很麻烦了。所以C++使用了一个姓的关键字using。
(1)第一种用法:
例如:using namespace std; 这样子的话就可以使用std名字空间下面所有的方法而不用加std::。
(2)第二种用法:
例如:using std::cin; 这样子的就只能cin前面不加std::,而其他的,如cout还是要加上名字空间的。
2、一般using方法不放在头文件里面,因为头文件可能被多个cpp文件引用,那cpp文件相应的也使用了using,但有时候我们会存在两个名字空间的方法名字是一样的,这时候就会出现问题。
3.2 Library string Type
**首先当然是头文件和名字空间的引用啦
#include <string>
using std::string;
1、初始化string的方法
(1)string s1; 创建一个空的字符串
(2)string s2(s1); s2通过拷贝s1创建
(3)string s2 = s1; 同(2),
(4)string s3("value"); s3是通过拷贝一个字符串创建的,但没有包括'\0';
(5)string s4(n,'c'); 创建一个n个c的string;
PS:通过‘=’创建的方法是间接创建的方法(重载‘=’),而()则是直接创建的方法(重载构造函数)。
2、string的操作
os<<s;
is>>s; 不接受空格,开始有空格直接忽略,碰到空格直接停。
getline(is ,s); 将一行的输入读取,包括空格,直到遇到换行符
s.empty(); 判断s是否为空
s.size(); 计算s的长度
s[n]; 返回一个在s第n位置的字符的引用。
s=s1+s2; 将s2copy在s1的后面,然后给s;
s1=s2; 赋值
s1==s2;
s1!=s2;
<,<=,>,>=
比较的规则:就是依据ASCII表进行比较,不再多说。
PS:(1)s.size();的返回值是一个新的类型size_type,具体是什么,由于代码是封闭的,无法得知,但是它是一个无符号的类型,而且可以存非常非常大的一个数字,记得不要认为返回值是int等等的。
(2)对于+,+=操作是,最左边一定是一个string类型的变量。
3、string中的字符的相应操作
isalnum(c) 如果是字母或者数字的话返回true;
isalpha(c) 如果是字母的话返回true;
iscntrl(c) 如果是操作字符的话返回true;
isdigit(c) 如果是数字的话返回true;
isgraph(c) 如果不是空格而且能打印出来的返回true;
islower(c) 如果是小写字符的话返回ture;
isprint(c) 如果能打印出来的话返true;
ispunct(c) 如果c不是一个操作字符的话返回true;
isspace(c) 如果是空格的话返回true;
isupper(c) 如果是大字字母的话返回true;
isxdigit(c) 如果是十六进制的数返回true;
tolower(c) 如果是大写字母,返回对应的小写字母。
toupper(c) 跟上面相反。
PS(1)遍历string中每个字母的新方法(新11特性)
for(declaration : expression)
statement;
declaration:就是用来存从string中拿出的每个字母。可以有赋值和引用2种,就和数组的形参是一个意思。
expression: 就是string类型的变量。
statement: 就是statement;
e.g for(auto c:str) for(auto &c:str)
{ {
} }
(2)可以用decltype()方法来给出变量类型。
e.g decltype(s.size()) count; 就可以很方便的定义一个不知道是啥类型的新变量;
(3) 以.h结束的头文件是C版本的,是没有名字空间的,而以c开头的头文件是c++版本的,含有名字空间。
3.3 Library vector Type
**首先当然是头文件和名字空间的引用啦
#include <vector>
using std::vector;
1、定义,初始化vector
(1)vector<T> v1 创建一个空的存放T类型的vector;
(2)vector<T> v2(v1) 通过拷贝v1来创建v2;
(3)vector<T> v3(n,val) 创建一个v3,其中含有n个值为val的数据;
(4)vector<T> v4(n) 创建一个还有n个初始化的变量
(5)vector<T> v5{a,b,c……} 创建一个v5,其中含有的数据为a,b,c,d……
(6)vector<T> v5={a,b,c……} 同(5)
2、vector的相关操作
(1)向vector中加入元素
e.g
vector<string> text;
string word;
while(cin>>word)
{
text.push_back(word);
}
(2)v.empty() 如果是空的返回true;
(3)v.size() 返回v的长度;
(4)v[n] 返回第n个位置的引用;
(5)v1=v2 用v2的元素取代v1;
(6)v={a,b,c……} 用a,b,c……来取代v中的元素;
(7)还有就是比较等等的判断。
3.4 循环(略过……)
3.5 Arrays
1、定义及初始化数组
(1)定义空数组
int arr[n]; //首先必须有类型,不能用auto来推测,还有就是n必须是常量,还有其中的value是随机的;
(2)定义+初始化
int a1[]={0,1,2}; //自动设定长度为3;
int a2[5]={1,3}; //等同于a2[5]={1,3,0,0,0}
int a3[2]={2,4,5}; // error,元素个数超过数组长度
(3)没有string,和vector的赋值copy的定义初始化方法
(4)复杂的数组(纯翻译)
int arr[10];
int (*Parray)[10] = &arr;
int (&arrRef)[10] = arr; //引用
2、访问数组中的元素
(1)遍历
for(auto i:score)
cout<<i<<endl;
(2)访问其中的一个
array[3],访问第4个元素,因为标号从0开始
3、指针与数组。
不多说,列一些我觉得比较重要的地方把
(1)首先,数组名可以理解为一个常指针,不可以改变其指向,其指向数组头,即array[0]。
(2)array = &array[0]
(3)在发生数组长度改变的时候,一定要注意你原先指向尾部的指针已经废掉了。切记切记。
4、C版本的string
(1)定义
char a="Hello World!";
(2)方法
strlrn(a); 测数组长度(不包括末尾的‘\0’)
strcmp(p1,p2) 比较p1和p2,如果p1>p2,那么返回一个正值, 如果p1=p2,那么返回0,如果p1<p2,那么返回一个负值,
strcat(p1,p2) 将p2加到p1的后面
strcpy(p1,p2) 将p2拷贝到p1;
(3)新旧版本的转换
char a[] = b.c_str();
C++primer学习笔记(一)——Chapter 3的更多相关文章
- C++ Primer学习笔记(三) C++中函数是一种类型!!!
C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...
- C++ Primer学习笔记(二)
题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接 C++ Primer学习笔记(一) 27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...
- C++primer学习笔记(二)——Chapter 4
4.1 Fundamentals 1.Basic Concepts (1)操作符分为一元,二元或者三元操作符: (2)复杂的表达式中含有很多操作符时: 规则一:分为不同的级别,级别高的先运行: 规则 ...
- C++primer学习笔记(四)——Chapter 6
6.1 Function Basics 一.函数的构造 type functionName( parameters list) statement 1.首先格式如上,一个函数一定要有返回值的类型ty ...
- C++primer学习笔记(三)——Chapter 5
5.1 Simple Statements 1.记得每个语句后面加上”;”不过现在编译器都有实时编译,一般都不会忘记的, 2.空语句 (1)就是啥都没有.只有一个“:” (2)还是有很多用处的,例 ...
- 【Convex Optimization (by Boyd) 学习笔记】Chapter 1 - Mathematical Optimization
以下笔记参考自Boyd老师的教材[Convex Optimization]. I. Mathematical Optimization 1.1 定义 数学优化问题(Mathematical Optim ...
- C++ Primer学习笔记(一)
始终对C++念念不忘,看过 一个32岁入门的70后程序员给我的启示 之后,心情激荡,更是一发不可收拾. 认真地说,我不是一个执着的人,见异思迁,好读书而不求甚解,兼之情绪化(~~ 某些方面),于是怒 ...
- java系列:《java核心技术 卷1》学习笔记,chapter 11 调试技巧
11. 6 调试技巧 1)一个不太为人所知却非常有效的技巧是在每个类中放一个main方法,这样就可以对每个类进行单元测试.这个方法可以保留,因为在java虚拟机只调用启动类的main方法. 2) ...
随机推荐
- StackExchange Redis如何实现BRPOP/BLPOP
今天在使用StackExchange Redis客户端时.我想要使用BRPOP,但是我发现StackExchange Redis并没有提供API,没办法只好找资料看文档了. 原来StackExchan ...
- HDU 1394 Minimum Inversion Number(线段树求逆序对)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1394 解题报告:给出一个序列,求出这个序列的逆序数,然后依次将第一个数移动到最后一位,求在这个过程中 ...
- Kalendar server Beijing Tiandiyuandian Technology Limited 果然是木马
我的Windows 7 系统,在开始菜单里面输入msconfig ,回车打开系统配置,隐藏所有Microsoft的进程,在服务和启动项里面都有 Kalendar server Beijing Ti ...
- C++中的memset()函数 ------------转自:http://www.360doc.com/content/10/1006/18/1704901_58866679.shtml
memset()函数可以对大内存的分配进行很方便的操作(初始化),所谓“初始化”,当然是指将你定义的变量或申请的空间赋予你所期望的值,例如语句int i=0;就表明定义了一个变量i,并初始化为0:如果 ...
- [BZOJ1064][Noi2008]假面舞会
[BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...
- 阿里云vps上mysql挂掉的解决办法
阿里云vps上mysql挂掉的解决办法 4条回复 用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知.之前没 ...
- 使用ajax解决ie缓存问题
1.在XMLHttpRequest/发送的请求之前 加上 XMLHttpRequest.setRequestHeader("If-Modified-Since","0&q ...
- bootstrap的select2校验及不影响原来的格式
<style> .has-error .select2-choice, .has-error .select2-choices, .has-error.simple .select2-ch ...
- c++11之bind
std::bind是个c++推出的新的特性,非常有用,让你写起来率试不爽. #include <iostream> using namespace std; #include <fu ...
- iOS 网络请求中的challenge
这里有一篇文章,请阅读,感谢作者!http://blog.csdn.net/kmyhy/article/details/7733619 当请求的网站有安全认证问题时,都需要通过 [[challenge ...