C++ ―― vector容器的常用接口

匿名 (未验证) 提交于 2019-12-03 00:22:01

C++知识总结目录索引

1. resize()

void resize (size_type n, value_type val = value_type());

调整数组的容量,接受两个参数。
1. 如果 n < v.size(),则将其元素个数减少到n个,销毁后面那些超出的元素。
2. 如果 v.size() < n < v.capacity(),扩大size(),新增的元素值为val。
3. 如果 n > v.capacity(),对数组进行扩容,新增的元素值为val。


2. reserve()

void reserve (size_type n);
扩大数组容量,如果n > v.capacity(),给数组新开辟一块容量为n的空间,把原数据拷贝至新空间;如果n<=v.capacity(),则不进行任何操作。


3. operator[]

reference operator[] (size_type n);
const_reference operator[] (size_type n) const;

  返回数组中下标为n的元素的引用。该函数有两种形式,普通的可以通过返回值修改v[n]的值,加const不能通过返回值修改。如果n超出数组范围,直接断言报错。与它类似的还有at()函数,该函数出现越界情况是抛出异常。


4. assign()

(1) void assign(const_iterator first,const_iterator last); (2) void assign(size_type n,const T& x = T());

(1) 将区间[first,last)的元素赋值到当前的vector容器中
(2) 赋n个值为x的元素到vector容器中,这个容器会清除掉vector容器中以前的内容。

vector<int> first; vector<int> second; vector<int> third;  first.assign(7, 100);             // 7 ints with a value of 100  vector<int>::iterator it; it = first.begin() + 1;  second.assign(it, first.end() - 1); // the 5 central values of first  int myints[] = { 1776, 7, 4 }; third.assign(myints, myints + 3);   // assigning from array.


5. insert()

(1) iterator insert (iterator position, const value_type& val);  (2) void insert (iterator position, size_type n, const value_type& val);  (3) template <class InputIterator>     void insert (iterator position, InputIterator first, InputIterator last);

(1) 在指定位置position前插入值为val的元素,返回指向这个元素的迭代器
(2) 在指定位置position前插入n个值为val的元素
(3)在指定位置position前插入区间[first, last)的所有元素

int main() {     vector<int> v1(3, 100);     vector<int>::iterator it;      //(1)     it = v1.begin();     it = v1.insert(it, 200);     //(2)     v1.insert(it, 2, 300);      // "it" no longer valid, get a new one:     it = v1.begin();      //(3)     vector<int> v2(2, 400);     v1.insert(it + 2, v2.begin(), v2.end());      int myarray[] = { 501, 502, 503 };     v1.insert(v1.begin(), myarray, myarray + 3);      cout << "v1 contains:";     for (it = v1.begin(); it<v1.end(); it++)         cout << ' ' << *it;     cout << endl;      return 0; }


6. erase()

(1) iterator erase (iterator position); (2) iterator erase (iterator first, iterator last);

(1) 删除position处的元素。迭代器position指向不变,仍然指向被删除元素的位置,而被删除元素之后的所有元素都向前移动一位,也就是该迭代器实际上是指向了原来被删除元素的下一个元素

(2) 删除区间[first, last)内的所有元素。删除一段段元素之后,后面的元素(从last开始到vector.end())会被复制到被删除元素段开始的地方(first开始),而vector.end()也根据删除的元素个数往前移动。

注意:即使容器内容是指针对象,erase()也会清空指针对象指向的内容。


7. clear()

  清空容器中的内容,但如果是指针对象的话,并不能清空其内容,必须要像以下方法一样才能达到清空指针对象的内容:

vector<int*> v; for (int it = 0; it != v.size(); ++it) {     delete v[it]; } v.clear();

但也可以使用swap函数巧妙的完成清理内存:

v.clear();   v.swap(vector<int>());  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!