C++ Primer个人笔记 by Nicolas 第三章

转载请注明出处:http://blog.csdn.net/auto_ac/article/details/43966695

注:内容不全,记录的是部分细节知识点

string

几个初始化:

std::string str1 = "abc";

std::string str2(str1);

std::string str3("abcd");

std::string str4(10, ‘a‘); //初始化为 10个a

size()类型:

std::string::size_type (unsigned long)

赋值:

str2 = str1;  先将str2内存释放掉,再重新分配内存存放str1副本

字符串字面值的连接:

std::string s1("hello");

std::string s2("world");

std::string s3 = s1 + ", "; (ok)

std::string s4 = "hello" +", "; (error)

std::string s5 = s1 + ", " +"world"; (ok) //重要

std::string s6 = "hello" +", " + s2; (error)

string比较运算符:

<, >, =, !=, <=, >=   
按字典序比较

getline

std::string str;getline(std::cin, str);

cctype

判断函数:

isalnum 数字字母

isalpha 字母

iscntrl 控制符

isdigit 数字

isgraph 不是空格,但可打印

islower 小写字母

isprint 可打印

ispunct 标点符号

isspace 空格

isupper 大写

isxdight 十六进制数

变换函数:

tolower 大写字母变成小写,其它字母不变

toupper 小写字面变成大写,其它字母不变

vector

几个初始化:

vector <T> v1;

vector <T> v2(v1);

vector <T> v3(n, i);    //n个值为i的元素

vector <T> v4(n);      //初始化n个元素的副本

注:初始化没赋值都为空, 比方int的值是0, string的值是空字符串

vector对象的操作:

v.empty()

v.size()

v.push_back();

v[n]

v1 = v2      赋值

v1 == v2      判断对象是否相等

!=, <, <=, >. >=      对象比较大小

vector迭代器:

*iter = 0;  解引用操作符(*操作符)

vector<int>::iterator iter;//迭代器定义

vector<int>::const_iterator iter;//不改变对象的值的迭代器定义,迭代器可以修改值重点

const vector<int>::iterator iter = v.begin();//迭代器的值不能修改;重点

*(iter+number)  //越界或碰到v.end()可以存在,可以与其它迭代器进行判断,但不能进行解引用运算,

//number类型为vector::size_type

*(iter-number)

iter1-iter2     //两个迭代器的距离,类型为difference_type   (long long)

vector<int>::iterator it = (v.begin()+v.end())/2;        //接近O(1),取最中间的元素的迭代器

注:任何改变vector长度的操作都会使已存在的迭代器失效,例如在push_back(), erase()以后

bitset

几个初始化:

bitset<n> b;    //n位,每位都为0

unsigned u = “4“;

bitset<n> b(u); //b为u的二进制副本, 位置0为低位, 即b[2] = 1;

string s = “101010101”;

bitset<n> b(s); //b为s串的副本,注意s必须是01串,否则报错,程序终止

bitset<n> b(s, pos, count)   //pos为串s的起始位置,count为串的长度,选串的一部分作为副本给b

例子:

bitset<16> bitvec1(0xffff);// 位置0为低位,即1111111111111111

bitset<32> bitvec1(0xffff);// 位置0为低位,即11111111111111110000000000000000

string s("111011");

bitset<32> b(s);
//位置0为低位,即1110011000000000000000000000000

bitset<32> b(s, 2, 4);
//选串s的2~5位,位置0为低位,即10110000000000000000000000000000

bitset<32> b(s, s.size()-3);//倒着取最后3位,即110000000000000000000000000000

bitset对象的操作:

b.any() 是否存在有1的位

b.none() 不存在有1的位

b.count() 有1的位数

b.size()

b[pos]

b.test(pos) 测试pos位是否为1

b.set() 全部设1

b.set(pos) pos位设1

b.reset() 全部设0

b.reset(pos) pos位设0

b.flip() 全部取反

b.flip(pos) pos位取反

b.to_ulong() 转换成unsigned long整数

os << b逐位输出,从高位到低位,  比方bitset<32> b("1011");  

存储为11010000000000000000000000000000(0~31

输出为00000000000000000000000000001011 (31~0)

时间: 2024-08-04 22:38:35

C++ Primer个人笔记 by Nicolas 第三章的相关文章

课本学习笔记4:第三章 20135115臧文君

第三章 进程管理 注:作者:臧文君,原创作品转载请注明出处. 一.进程 1.进程管理是所有操作系统的心脏所在. 2.进程:是处于执行期的程序以及相关的资源的总称,实际上,进程就是正在执行的程序代码的实时结果. 3.执行线程:简称线程thread,是在进程中活动的对象. 4.内核调度的对象是线程,而不是进程. 5.对Linux而言,线程是一种特殊的进程. 6.进程提供两种虚拟机制:虚拟处理器和虚拟内存. 同一个进程中的线程之间可以共享虚拟内存,但每个都拥有各自的虚拟处理器. 7.Linux系统中,

C++ Primer 学习笔记_45_模板(三):缺省模板参数(借助标准模板容器deque实现Stack模板)、成员模板、关键字typename

一.缺省模板参数 1.stack内存能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: template <typename T, typename CONT = std::deque<T> > //此处末尾必须有空格,否则编译出错 class Stack { - private: CONT c_; }; 如果没有传第二个参数,默认为deque 双端队列,当然我们也可以传递std::vector<T> 2.示例:借助

[读书笔记]Effective Java 第三章

覆盖equals方法时请遵守通用约定 这种说法的大意是要说明,Object类中定义的很多默认准则是被许多工具类或是第三方框架共同遵守的标准,一旦改动这样的标准机制,会在后续的使用中产生不稳定因素.equals方法常见用来做以下用途时,不建议对equals方法进行覆盖: 1.判断实例的唯一性 2.提供某种程度的逻辑相等 equals方法满足自反性,对称性,传递性,一致性,非空性.当需要覆盖equals方法时,需要注意以下三点: 1.覆盖equals时总要覆盖hashCode 2.不要企图让equa

【读书笔记】C++Primer---第三章

1.由于为了与C语言兼容,字符串字面值与标准库string类型不是同一种类型: 2.以下代码中,cin有几点需要注意:a.读取并忽略开头所有的空白字符(如空格.换行符.制表符):b.读取字符直至再次遇到空白字符,读取终止 int main() { string s; cin >> s; return 0; } 3.string的IO操作还有一个就是getline,终止条件就是遇到换行符,即使是第一个字符是换行符,则表明stirng读取到的是空字符 int main() { string lin

Accelerated C++ 学习笔记及题解----第三章

本章主要内容 1.类型定义typedef 2.局部变量 3.格式化输出初涉 4.向量vector及基本方法 本章主要程序代码 1.计算平均成绩 #include <iomanip> #include <iostream> #include <string> using namespace std; int main() { // ask for and read the student's name cout << "Please enter yo

《java并发编程的艺术》读书笔记-第三章Java内存模型(二)

一概述 本文属于<java并发编程的艺术>读书笔记系列,第三章java内存模型第二部分. 二final的内存语义 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.可以参照之前整理的关键字final.这里作者主要介绍final域的内存语义. 对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序. 初次读一个包含final域的对象的引用,与随后初次读这

C++PRIMER 阅读笔记 第三章

本章主要介绍 string vector 和 bitset, 不能贪多,现在本文主要介绍 string 与 vector 头文件中最好不要使用namespace std, 因为头文件会直接被预处理器放置到C中 std::string 的构造方式: string s1; string s2(s1); string s3("value");string s4(n,'c');           第三种构造方式可有"\0"? cout 与 cin 可以直接操作string

C++Primer学习笔记《三》

数组名其实就是一个常指针,指向数组元素中第一个的地址,在程序中如果要用指针遍历数组,不能直接用数组名来自增或自减,因为它是常量,一般先把数组名保存一份同类型的指针,然后再用这个指针来自增或是自减来实现遍历. 指针也是可以进行算术加法和减法的,但必须保证原地址和结果地址都是想同一个数组的元素或是指向数组的末端元素的下一个单元(类似end()). 指针的减法操作是有意义的,它表示两个指针的相对位置关系,减法结果是ptrdiff_t类型,和size_t类型一样,是一种机器相关的类型,size_t是无符

C++ Primer学习笔记(三) C++中函数是一种类型!!!

C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! 重要的事情要说三遍... 接 C++ Primer学习笔记(二) 类的构造函数 与类同名,且无返回类型. 同类的成员函数一样,也可以在类中声明,在类外定义. 格式: 类名(): 成员1(成员1初始化值), 成员2(成员2初始化值) { } 以上,冒号至大括号中间的部分,称为构造函数的初始化列表,用于调用类成员的构造函数来初始化. 没有在初始化列表中显式指定初始化的成员,将会