这是关于一个普通双非本科大一学生的C++的学习记录贴
在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料
那么开启正题
今天分享的是关于vector的一些函数
1.构造函数
vector() // 无参构造函数
vector(size_t typen,const vaule_type& val = vaule_ type()) //构造并初始化n个val
vector(const vector& x) //拷贝构造
vector(inputlterator first,inputlterator last) //使用迭代器进行初始化构造
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的使用
begin() + end() //获取第一个数据的位置与获取最后一个元素后面的位置
rbegin() + rend() //获取第一个元素的前面的位置与获取最后一个元素的位置
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迭代器就不能修改,一般迭代器可以进行修改
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_ ,修改规则与上面同样的
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;
}
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.空间问题
size() //获取数据的个数
capacity() //获取容量的大小
empty() //判断是否为空
resize() //改变vector的size
reserve() //改变vector的capacity
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.增删查改
push_back() //尾插
pop_back() //尾删
find() //查找
insert() //在pos位置前插入
erase() //删除pos的位置
swap() //交换两个vector的数据空间
operator[] //像数组一样访问
注意find不是vector自身提供的方法,是STL提供的算法
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是前插
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版本不一样
新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!!