Vectors包含着一系列連續存儲的元素,其行爲和數組類似。訪問Vector中的任意元素或從末尾添加元素都可以在常量時間複雜度內完成,而查找特定值的元素所處的位置或者是在Vector中插入元素則是線性時間複雜度。
當Vectors空間不足時,會重新申請一段連續的空間並進行內存拷貝。
構造函數(constructors)
constrctor_1.cpp
#include <iostream>
//#include <Allocator>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<int> vi; //構造函數vector(const Allocator& = Allocator);
vi.push_back(1); //push_back插入元素在最後
vi.push_back(2); //push_back插入元素在最後
vi.insert(vi.begin()+2,3);
vi.insert(vi.begin()+3,4);
vi.resize(6);
vi[5] = 6; //賦值
vector<int>::iterator it = vi.begin(); //初始化迭代器
cout << "迭代器輸出" << endl;
while(it!=vi.end())
{
cout << *it << '\n';
it++;
}
cout << endl;
cout << "vi[]輸出" << endl;
for(unsigned int i=0;i < vi.size();i++)
{
cout << vi[i] << endl;
}
cout << endl;
cout << "vi.at()輸出" << endl;
unsigned int j(0);
do
{
cout << vi.at(j)<<endl; //at(j)比使用vi[]更安全;
j++;
}while(j<vi.size());
cout << endl;
cout << "c++11輸出" << endl;
for(auto n:vi) //c++11新增加的for遍歷矢量
{
cout << n <<endl;
}
//C++11遍歷stl容器
vector <string> vs = {"i","like","china"};
for(auto & s : vs)
{
cout << s ;
}
}
constructor_2.cpp
#include <iostream>
//#include <Allocator>
#include <string>
#include <vector>
typedef unsigned int uint;//typedef定義類型名
using namespace std;
int main()
{
vector<string> str(5,"s"); //構造7個s的字符串,不能使用‘s’;
for(uint i=0;i<str.size();i++)
{
cout << str.at(i) << endl;
}
/*輸出:
s
s
s
s
s
*/
vector<uint> vui(6); //構造一個容量爲6的矢量
for(uint i=0;i<vui.size();i++)
{
cout << vui.at(i) ;
}
//輸出:000000
cout << "\n";
double vdarr[] = {0.0,0.1,0.2,0.3,0.4};
vector<double> vd(vdarr,vdarr+5); //使用數組構造一個double的矢量
vector<double> vd1(vd.begin(),vd.end()-1); //使用矢量構造一個矢量
for(uint i=0;i<vd.size();i++)
{
cout << vd[i] << " ";
}
cout <<endl;
vector<double>::iterator it;//迭代器
for(it=vd1.begin();it!=vd1.end();it++)
{
cout << *it << " ";
}
getchar();
system("pause");
vector<double>vd2(vd1); //深拷貝,元素相同,地址空間不同,而淺拷貝,傳參數
vector<double>vd3 = vd1;
}
assign函數
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> T1 = {1,2,3,4,5};
vector<int> T2;
T2.assign(T1.begin(),T1.end()-1); //複製
vector<int>::iterator it;//迭代器
for(it=T2.begin();it!=T2.end()-1;it++)
{
cout << *it << " ";
}
T2.assign(5,7); //替換爲5個7
for(it=T2.begin();it!=T2.end();it++)
{
cout << *it << " ";
}
//assign類似構造函數
}
其他函數
函數 | 作用 |
---|---|
at() | 返回指定位置的元素 |
back() | 返回最後一個元素 |
begin() | 返回最後一個元素的迭代器 |
capacity() | 返回vector所能容納的元素數量(在不重新分配內存的情況下) |
clear() | 清空所有元素 |
empty() | 判斷是否爲空 |
end() | 返回最後一個元素的次迭代器 |
erase() | 刪除指定元素 |
front() | 返回第一個元素 |
get_allocator() | 返回vector的內存分配器 |
insert() | 插入元素到vector中 |
maix_size() | 返回vector所能容納的元素的最大數量 |
pop_back() | 移除最後一個元素 |
rbegin() | 返回vector尾部的逆迭代器 |
rend() | 返回vector首部的逆迭代器 |
reserve()設置vector最小的元素容納數量
resize()|改變vector元素數量的大小
size()|返回vector元素數量的大小
swap()|交換兩個vector