STL标准容器vector,动态数组。
如果类A只有带参构造函数如A(int n),这时A *arr=new A[],这个不好弄,直接丢到vector去弄成动态数组
int main()
{
//几个重载构造函数
int arr[]={1,2,3,4,5};
vector<int> first; //空的
vector<int> second(4,100); //新建4个元素,全部赋值为100
//↑对上面提到的类A,理所当然的如vector<A> second(4,A(100) );之类
vector<int> third (second.begin(),second.end()); //参数为second的迭代器包括的范围
vector<int> fourth(arr,arr+5); //数组类似,在arr~arr+5范围内,左开右闭[arr,arr+5)
//↑也能直接:vector<int> fourth={1,2,3,4,5};
vector<int> fifth (fourth); //复制第4个vector
vector<int> sixth(100); //初始容量为100,与size()含义不同
//容易忘记的方法
vector<int> v;
v.reserve(100); //重分配容量为100,只有大于capacity时才会实际执行重分配
v.swap(fifth); //把v与fifth的内容交换,数组交换的意思
v.emplace(10); //不指定插入位置则同insert默认放到最后,能使用构造函数新建对象插入
int a1 = v.front(); //返回第一个元素v[0]
int a2 = v.back(); //返回最后一个元素v[v.size()-1]
vector<int>::iterator iter = v.begin(); //返回开头的迭代器
//↑另外cbegin(),rbegin()等,c意味const,r意味从右开始,即end()
v.push_back(10); v.pop_back(); //前:加入至尾部,后:删除最后一元素
//↑借这两个方法和v.back()即可当栈stack来用,后进先出
make_heap (v.begin(),v.end());//形成最大(默认)堆,下面操作的基础,v[0]为最大值
int ans=v.front(); //取值
pop_heap(v.begin(),v.end()); v.pop_back();
//↑前:把v[0]丢最后,后:删除最后元素。组合起来就是取最大堆的顶元素
v.push_back(ans); push_heap(v.begin(),v.end());
//↑把ans放到尾部,再形成最大堆结构。组合起来就是最大堆的插入元素
}
另外,最大堆最小堆也可由<queue>的优先队列priority_queue完成,更方便。另外值得记住size大于capacity时,capacity增加为1.5倍原容量,而且vector也像string有最大字符数一样,也有最大上限
网友评论