首先我们要学习的是容器
第一个是容器的初始化(构造方式)有三种方式
分别是
第一种
int arr[]={1,2,3}
vector
即容器存放的种类和从另外一个数组去拷贝一段数据。
第二种
vector
第一个3是指存放的进入容器的个数
第二个10是存进容器的值。
第三种
vector
直接将其他容器拷贝过来。
然后我们要了解容器的赋值方法
第一种
vector.assign(beg,end)左闭右开
例如
int arr[]={1,2,3}
vector.assign(arr,arr+3);
那么容器就会装载1,2.
之所以要左闭右开。是因为一个容器的结尾并不是这个容器的最后一个元素,而是元素的后一位。
所以vector.begin()是指的容器的第一位。vector.end()是容器的n+1位(n指元素个数)
那么这样vector.assign(v1.begin(),v2.end())就会拷贝中v2这个容器中的所有元素。
vector.assign(n,elem)
例如vector.assign(3,10);
同构造容器,不再赘述。
第三种vector.swap()
例如v2.swap(v1);就会将v1,v2的内容进行交换。
然后我们要讲的就是容器的大小
首先是
vector,size()那么返回值就是这个中元素的个数。(int类型)
第二个
vector.empty()。这个将会返回bool值,如果容器为空将会返回ture,否则会返回false
第三个
vector.resize(num);重新指定容器的大小,如果容器变长则会用默认值进行填充,如果变短则会自动删除超出容器大小的值。
第四个
vector.resize(num,elem)。这个地方就是把默认值替换为elem。规则相同。
容器的访问
vector[]进行访问就可以了,类比数组。
或者vec.at()。一样的是传入位置即可。
但是如果使用vec.at()出现越界会抛出out_of_range异常。
而vec[]会直接报错。但是区别不大。
接下来是容器的插入
vector.insert(pos,elem);
这个会在pos位置插入elem元素的拷贝,并且返回新数据的位置。
vector.insert(pos,n,elem);
在pos位置插入n个elem数据,无返回值
vector.insert(pos,beg,end);
注意Pos是对应位置的指针即vector.insert(v1.begin()+3,elem);
在pos位置插入beg到end区间的数据(前闭后开),无返回值。
然后就是对容器的末尾进行增删的操作。
vector.push_back(num)和vector.pop_back();即可
接下来我们来学习迭代器
首先迭代器的作用,可以减少容器的越界访问。
再就是迭代器的构造
vector
it=v1.begin();
cout << *it;通过*就可以实现对迭代器指向的元素进行访问和操作。
然后我们来学习迭代器的失效
vector.insert(it,8)由于容器的存储可能会整体搬迁,那么就可能导致迭代器的失效
在这里由于insert()可以返回插入的值的新的位置。
所有it=vector.insert(it,8);可以避免这个问题。
另外一种就是删除元素也有可能导致的迭代器失效。
vector
it2=v1.erase(it);
这个时候由于已经erase(it),系统会默认迭代器已经失效了。从而再次使用的时候会报错。
同理如果用it=v1.erase(it);就会重新使得迭代器有效,就可以避免这种问题的出现。