C++学习笔记之顺序容器

xiaoxiao2021-02-28  9

顺序容器不是说容器中的数据按照顺序排列,而是说元素的顺序和元素加入容器的值相对应。

容器的迭代器,vector的迭代器 vector<int> ::iterator begin; begin就是这个vector的迭代器。

一个迭代器范围是由一对迭代器表示的,begin指向范围中的第一个元素,end指向范围中的最后一个元素之后的位置,所以这种元素范围是一个左闭右开区间。[begin,end)

begin==end说明范围为空

通过若干次迭代可以让begin和end相等。

用一个容器拷贝另一个容器时,如果是容器之间的拷贝,容器的类型和元素类型必须相同。如果用迭代器范围进行拷贝,不要求容器类型相同。

array和内置数组不一样,array的长度不能改变,array的初始化方式和内置数组也不一样,array初始化:array<int,10> ::size_type i;

内置数组不能赋值和拷贝,但是array可以。

swap函数用来交换两个相同类型容器的内容。

容器的类型不同,容器中元素的类型也不同,但是容器中元素的类型相容(可以相互转化)的时候,采用assign;

下面举例说明三种不同的赋值方式:

容器间赋值

vector<int> vec1;

vector<int > vec2 = vec1;

范围赋值

list<int> vec3(vec1.begin(),vec1.end());

assign赋值

list<double> vec4;

vec4.assign(vec1.begin().vec1.end());

比较容器的大小和比较string的大小是一样的,比较容器大小的时候是看一个容器是不是另一个容器的子序列,如果不是那么就看第一个不相同的元素谁的比较大,那个就是大的容器。

向容器中添加元素:

push_back();所有容器都可以使用这个方法,把元素追加到容器的尾部。

push_front();把元素追加到容器的头部,vector是不支持这个函数的。

insert();在容器的特定位置插入元素,insert(一个迭代器,要插入的元素);insert方法的第一个参数指定了元素插入的位置,将元素插入到这个位置之前。

vector不应该用插入方法,除了向尾部插入元素以外向其他任何地方插入速度都很慢。

用insert方法向vector插入元素的时候,会使原来指向容器的迭代器,引用和指针失效。

访问容器中的元素:

每个顺序容器都有一个front成员函数和一个back成员函数。

front函数返回的是首元素的引用,back获得的是末尾元素的引用。

vector <int> vec;

auto vec.front(); 和 auto *vec.begin(); 对vec的begin迭代器解引用得到的也是首元素的引用。

auto vec.back(); 和 auto *(--vec.end()) 对vec的end迭代器向前移动再解引用得到末尾元素的引用。

成员函数的返回值是引用类型。

auto &v1 = vec.back();

v1 = 4000;改变了vec中最后一个元素的值。

auto v2 = vec.back();

v2 = 3000;并没有改变vec中元素的值

删除元素

pop_back() 函数,删除末尾元素

c.erease(p) 删除迭代器p所指的元素,函数的实参是迭代器,返回值也是迭代器

c.erease(b,e) 删除迭代器b和e指定范围内的元素

erease返回的是指向删除元素之后位置的迭代器

string的其它特殊用法

s.substr(pos,n) 函数,返回string的一个子字符串或者他本身。从pos开始的n个字符

append() 函数在string末位进行插入操作

replace() 函数删除string中的一部分用其它字符替换

string的搜索操作:

string的搜索函数的返回值应该是auto类型的。

find()函数,如果找到久返回第一个匹配位置的下标(下标是从0开始的)。

compare()函数,比较两个字符串。

to_string(val)函数把val转化成字符串

sto…也可以把string转化成其它类型

转载请注明原文地址: https://www.6miu.com/read-1250235.html

最新回复(0)