vector和array
- array是c++11之后新加的容器类型,他比vector更加轻便。
- array的数据存储在栈中,vector的数据存储在堆中。所以
- array容器处理数据的效率更快
- vector处理数据的量更大
- vector更强大,封装的函数更多;array更轻便,更适合一些操作简单,数据量比较少的情况。
- 下面看一下他们具体最多能存储unsigned int型的数据量是多少,感受一下。
#include <iostream>
#include <vector>
#include <array>
using namespace std;
vector<unsigned int> m_vec;
array<unsigned int,4> m_arr;
int main()
{
cout <<m_vec.max_size()<<endl;
cout<<m_arr.max_size()<<endl;
return 0;
}
输出:
1073741823
4
- 这就可以看出来差别了,array能存储多少,在初始化就确定了;而vector能存多少,是固定的,初始化的时候也不需要传入元素个数。
- 总之,vector肯定是更强大,但是强大一定会损失点东西;在数据量少的时候,并且不需要一些复杂操作的时候,可以选择array,因为它更快也更适合。
使用vector的一个例子
- 有个需求就是保存传入的user id,删除user id,可以遍历,清空整个user list
- 根据上面的要求,用vector写的一个例子。
#include <iostream>
#include <vector>
#include <array>
using namespace std;
class UserList
{
public:
UserList();
virtual ~UserList();
public:
int GetCount();
unsigned int GetItem( int index);
void AddItem(unsigned int elem);
void RemoveItem(unsigned int elem);
void ClearAll();
protected:
vector<unsigned int> m_user_list;
};
UserList::UserList() {
}
UserList::~UserList() {
ClearAll();
}
int UserList::GetCount() {
return m_user_list.size();
}
unsigned int UserList::GetItem(int index) {
if(index>=0&&index<m_user_list.size())
return m_user_list[index];
else
return 0;
}
void UserList::AddItem(unsigned int elem) {
if(m_user_list.capacity()<=m_user_list.max_size())
{
m_user_list.push_back(elem);
}
else
return;
}
void UserList::RemoveItem(unsigned int elem) {
vector<unsigned int>::iterator it;
for(it=m_user_list.begin();it!=m_user_list.end();++it)
{
if(elem==(*it))
{
m_user_list.erase(it);
}
}
}
void UserList::ClearAll() {
if(!m_user_list.empty())
m_user_list.clear();
}
int main() {
UserList user_list;
user_list.AddItem(16782232);
user_list.AddItem(12222222);
user_list.AddItem(12035534);
user_list.RemoveItem(16782232);
int cn = user_list.GetCount();
for(int i=0;i<cn;++i)
cout<<user_list.GetItem(i)<<endl;
cout<<"list count : "<<user_list.GetCount()<<endl;
return 0;
}
- 这个简单的例子基本符合上面的要求,而且全部调用vector函数完成,很省事,这也是容器的强大之处。