C++ vector笔记
来源:互联网 发布:java mvc框架实例 编辑:程序博客网 时间:2024/06/08 19:58
vector是C++标准模板库中的内容,它是一个容器,简单地说,就是一个能够存放任意类型的动态数组,可以动态改变大小。
1、包含头文件#include<vector>
2、变量声明:vector<int>vec(100); 代表vec可以存放100个int类型的数据,于是,它可以像普通数组一样访问
ps 二维数组:vector <int*>vec;
3、迭代器类型:vector容器类的迭代器类型为一个名为iterator的typedef,其作用域为整个类,其行为可以看成是指针。
例如:
#include<iostream>#include<vector>using namespace std;int main(){vector<int>::iterator it;vector<int>vec(6);for(int i=0;i<6;i++){int a;cin>>a;vec.push_back(a);//cin>>vec[i];}for(it=vec.begin();it!=vec.end();it++){*it=2; //使用 * 访问迭代器所指向的元素}for(int i=0;i<6;i++)cout<<vec[i]<<' ';return 0;}
这串代码实现了数据的输入、修改与输出。
3、一些基本操作
① push_back(a)
通过上述代码我们也可以知道,该方法的作用是将元素添加到矢量尾,在编写程序时,无需了解元素的数目,只要能够取得足够的内存,程序就可以根据需要增加vec的长度。
② erase(a)
删除a位置的数据,也可以接受两个迭代器参数,定义要删除的区间。例如:
vec.erase(vec.begin(),vec.end())即为删除[begin,end)区间(注意左闭右开)。也可以使用两个迭代器表示。
③ Insert(pos,elem)
可以在pos位置插入elem。该方法也接受三个迭代器参数,第一个指定新元素的插入位置(前面),第二、三个定义了被插入区间
例如:
vector<int>old_v;vector<int>new_v;...old_v.insert(old_v.end(),new_v.begin()+1,new_v.end());该代码将新元素插入到old.end()前面,即矢量最后一个元素的后面。
④ 可以在容器中装入自定义的数据类型。
例如定义一个class Myclass{}后;我们就可以定义一个存放class 的容器vetor<Myclass>vec;
定义容器时可以赋初值:vector<int>vec(100,0)即定义了一个容量为100的容器,并赋初值0。并且,我们可以把一个容器的对象赋值给另一个容器: vec2 = vec;
⑤clear()
移除容器中所有数据
⑥ empty()
判断容器是否为空
⑦ front()
传回第一个数据
⑧ pop_back()
删除最后一个数据
⑨ resize(num)
重新设置该容器的大小
⑩ begin()
返回容器中第一个元素的迭代器,end()同理
⑾ size()
返回容器中的数据个数
下面是一个例子便于我们理解上述方法的用法
#include <iostream>#include <string>#include <vector>using namespace std; struct Review { string title; int rating;}temp;bool FillReview(Review & rr){ cout << "Enter book title ('quit' to quit): "; getline(cin,rr.title); if (rr.title == "quit") return false; cout << "Enter book rating: "; cin >> rr.rating; if (!cin) return false; // get rid of rest of input line while (cin.get() != '\n') continue; return true;}void ShowReview(const Review & rr){ cout << rr.rating << "\t" << rr.title << endl; }int main(){ vector<Review> books; while (FillReview(temp)) books.push_back(temp); int num = books.size(); if (num > 0) { cout << "Thank you. You entered the following:\n" << "Rating\tBook\n"; for (int i = 0; i < num; i++) ShowReview(books[i]); cout << "Reprising:\n" << "Rating\tBook\n"; vector<Review>::iterator pr; for (pr = books.begin(); pr != books.end(); pr++) ShowReview(*pr); vector <Review> oldlist(books); // copy constructor used if (num > 3) { // remove 2 items books.erase(books.begin() + 1, books.begin() + 3); cout << "After erasure:\n"; for (pr = books.begin(); pr != books.end(); pr++) ShowReview(*pr); // insert 1 item books.insert(books.begin(), oldlist.begin() + 1, oldlist.begin() + 2); cout << "After insertion:\n"; for (pr = books.begin(); pr != books.end(); pr++) ShowReview(*pr); } books.swap(oldlist); cout << "Swapping oldlist with books:\n"; for (pr = books.begin(); pr != books.end(); pr++) ShowReview(*pr); } else cout << "Nothing entered, nothing gained.\n"; // cin.get();return 0;}
- C++vector学习笔记
- C++primer笔记之vector多态
- C++Vector
- c++vector
- c++:vector
- <C++>vector
- C++vector
- 【c++】【vector】
- C++ vector
- c++: vector
- c ++ vector
- C++vector
- c++:vector
- C++<vector>
- C++Vector
- vector笔记
- vector 笔记
- vector笔记
- poi对word2003或者2007的图片读取和写入操作
- HDU 1789Doing Homework again
- Codeforces #369(Div.2)A. Bus to Udayland【水题】
- cookie与session简单对比分析
- 每天200亿次查询 – MongoDB在奇虎360
- C++ vector笔记
- 1274 不好玩的罚金
- Codeforces Round #369 (Div. 2)
- 如何在本地调试web站点
- 20 分数简单累加
- 关于AM5728的电源
- redis主从同步原理
- MQTT协议详解二
- Android中SQLiteDatabase操作