C++Primer第五版 第九章提炼

1、当将一个容器初始化另一个容器的拷贝的时候,两个容器的类型和元素类型必须相同。如果传入的参数是迭代器的话,只要容器的元素能够相互转换即可。

vector<int> v2;
vector<string> v3
list<char*> l;

vector<string> v1(v3);//正确
vector<string> v4(v2);//错误 容器元素不相同
vector<string> v5(l.begin(),l.end());//正确 char*可以转换为string


2、如果元素具有默认构造函数,可以只为构造函数提供一个容器大小的参数。否则需要显示的指定元素的初始值。

vector<int> v(10);//10个0
vector<string> svec(10,"HI");//10个HI
vector<Person> pvec(10);//person必须提供默认构造函数

3、大小也是array的一部分,也就是说指定array实例的时候,除了指定元素类型还必须指定数组的大小。

4、除了array外,对任意两个容器使用Swap不会对容器里面的元素进行更改,只是交换了容器内部的数据结构。但是对于array操作则是交换了数组的元素。

5、insert:在迭代器位置插入元素,可以是单个元素,可以是指定个数的元素,可以是一个迭代器范围,也可以是一个列表。emplace与insert相似但是传入的元素是构造函数的参数,且不支持多个元素的插入。两者均返回插入第一个元素的迭代器。

vector<Person> v;
/*v.resize(10,Person("cao",10));*/
v.reserve(10);
v.emplace_back("cao", 10);
v.emplace(v.begin(),"ja",10);

v.insert(v.begin(), 10,Person());
v.insert(v.begin(), Person());
v.insert(v.begin(), v.end() - 2, v.end());
v.insert(v.begin(), { "cao",10 });

6、forward_list:由于单向链表中没有简单的获取前驱的办法,因此尽量模拟自己写链表时的链表操作。

auto pre=lst.before_begin(),cur=lst.begin();

7、删除元素后,尾后迭代器总是会失效,指定其他位置的迭代器也有可能失效,因此我们必须更新尾后迭代器,同时每次删除或插入的时候,将当前迭代器指向插入或者删除后的下一个元素的迭代器。

//删除列表中元素为奇数的数。
//方法一:
vector<int> v{1,2,3,4,5,6,7,8,9};
auto cur=v.begin();
while(cur!=v.end())
{
    if(*cur%2)
        cur=v.erase(cur);//移动迭代器
    else
        cur++;
}

//方法二:
bool cmp(int i)
{
    return i%2;
}
vector<int> v{1,2,3,4,5,6,7,8,9};
v.erase(remove_if(v.begin(),v.end(),cmp),v.end);
//注意remove并不能删除元素,只是将元素移动位置
//并且返回伪删除第一个元素迭代器的位置。此时配合erase即可删除满足条件的元素。

8、适配器时一种能使某种行为看上去像是另一种事物一样,一个容器适配器接受一种已有的容器类型,使其行为看上去像是不同的类型。默认情况下。stack和queue是基于deque实现的。

9、数值转换操作,可以使用string.find_first_of找出数字的特性比如说+-.等,再转换。

//查找第一个以+-数字开头的元素
//先查找、再截取、最后转换
int i= stoi(s.substr(s.find_first_of("+-0123456789")));
double d= stoi(s.substr(s.find_first_of("+-.0123456789")));//小数多一个点

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值