这是关于一个普通双非本科大一学生的C++的学习记录贴
在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料
那么开启正题
今天分享的是关于vector的一些函数
1.构造函数
cpp
vector() // 无参构造函数
vector(size_t typen,const vaule_type& val = vaule_ type()) //构造并初始化n个val
vector(const vector& x) //拷贝构造
vector(inputlterator first,inputlterator last) //使用迭代器进行初始化构造
cpp
void vectorTest1()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
vector<int> v2(v1);
vector<int> v3(10, 1);
vector<int> v4(v1.begin() + 1, v1.end());
}
2.关于iterstor的使用
cpp
begin() + end() //获取第一个数据的位置与获取最后一个元素后面的位置
rbegin() + rend() //获取第一个元素的前面的位置与获取最后一个元素的位置
cpp
void vectorTest2()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int>::const_iterator it = v.begin();
while (it != v.end())
{
//++(*it);
cout << *it << " ";
++it;
}
cout << endl;
}
如果是const迭代器就不能修改,一般迭代器可以进行修改
cpp
void vectorTest3()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int>::reverse_iterator it = v.rbegin();
while (it != v.rend())
{
//++(*it);
cout << *it << " ";
++it;
}
cout << endl;
}
反向迭代器的名字加上了reverse_ ,修改规则与上面同样的
cpp
void vectorTest4()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
}
cpp
void vectorTest4()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
for (auto& e : v)
{
e++;
cout << e << " ";
}
cout << endl;
}
当然,支持迭代器就支持范围for,值得注意的是,范围for根据是否需要写数据可以选择加上或者不加上&
3.空间问题
cpp
size() //获取数据的个数
capacity() //获取容量的大小
empty() //判断是否为空
resize() //改变vector的size
reserve() //改变vector的capacity
cpp
void vectorTest5()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
cout << v.size() << endl;
cout << v.capacity() << endl;
cout << v.empty();
v.resize(2);
v.reserve(10);
}
空间的管理与string相似,这里不再详说
4.增删查改
cpp
push_back() //尾插
pop_back() //尾删
find() //查找
insert() //在pos位置前插入
erase() //删除pos的位置
swap() //交换两个vector的数据空间
operator[] //像数组一样访问
注意find不是vector自身提供的方法,是STL提供的算法
cpp
void vectorTest6()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.pop_back();
vector<int>::iterator pos = find(v.begin(), v.end(), 3);
if (pos != v.end())
{
v.insert(pos, 10);
}
pos = find(v.begin(), v.end(), 2);
v.erase(pos);
for (auto& e : v)
{
cout << e << " ";
}
cout << endl;
}
注意,insert是前插
cpp
void vectorTest7()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
vector<int> v2;
v2.push_back(10);
v2.push_back(20);
v2.push_back(30);
v2.push_back(40);
v2.push_back(50);
swap(v1, v2);
}
注意:vs下capacity是按1.5倍增长的,g++是按2倍增长的,它们的STL版本不一样
新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!!