单纯的使用vector不和algorithm连用.
vector自带的方法:
push_back(num) pop_back()
push_back 添加元素, pop_back删除元素.添加和删除都是在末尾添加和删除的.
void assign(const_iterator first,const_iterator last); // 相当于拷贝函数
void assign(size_type n,const T& x = T()); // 清除之前的内容,并且初始化n个x
demo:
vector<int> v_num{1, 2, 3, 4, 5};
vector<int> v_data;
vector<int>::const_iterator it = v_num.begin();
v_data.assign(v_num.begin(), v_num.end());
cout << "v_num value is ";
for (auto &num : v_num)
{
cout << num << "\t";
}
cout << endl;
cout << "v_data value is ";
for (auto &num : v_data)
{
cout << num << "\t";
}
cout << endl;
v_num.assign(2, 4);
cout << "v_num value is ";
for (auto var : v_num)
{
cout << var << "\t";
}
inline int &std::vector<int>::at(size_t _Pos);
at函数和数组通过下脚标读取值是一样的.但是at比通过下角标读取的安全,因为如果超过vector最大值[]
是不会报错的vector会向前读取
,但是at
会报错.
demo:
cout << "v_num size = " << v_num.size() << endl;
cout << "v_num[1] = " << v_num[3] << endl;
cout << "v_num[1] = " << v_num.at(3) << endl;
front() back()
inline int &std::vector<int>::back(); // 返回最后一个值
inline int &std::vector<int>::front(); // 返回第一个值的引用
cout << "v_data = " << v_data.back() << endl;
data
std::vector::data() 是 C++ 中的 STL,它返回一个指向内存数组的直接指针,该内存数组由向量内部用于存储其拥有的元素。
demo
int *pos = v_data.data();
cout << "pos = ";
for (auto &num : v_data)
{
cout << *pos++ << " ";
}
size()、capacity()、resize()、reserve()
size() // 返回向量的容量,是使用的容量
capacity() // 返回真实向量的容量
capacity() - size() // 未使用的容量
resize,即重置容器空间。当设置值小于当前容器空间时,会将目前容器中超出设置值的空间释放掉;当设置值大于当前容器空间时,会在当前空间的基础上增加容量。
reserve,即预留容器空间。当设置值大于当前容器空间时,会增加当前容器空间的大小
begin() cbegin() crbegin() end() crend() cend()
返回的迭代器,cbegin是const的不能改变. crbegin()是从后向前 c是const
, r是从后向前
.
clear()
清空数据.
empty()
判断是否为空,如果为空返回true
不为空返回false
.
插入函数 emplace() 和 insert()
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。再次强调,emplace() 每次只能插入一个元素,而不是多个。
erase
iterator erase(iterator position); //删除指定位置position的元素,并返回删除元素的下一个元素的迭代器
iterator erase(iterator first, iterator last);//删除从first到last(不包过last)之间的元素 [first,last),并返回last位置迭代器