c++ vector容器常用操作
·
文章目录
初始化
3种初始化的方式。
vector<int> v1;
//初始化10个值为1的v2
vector<int> v2(10, 1);
vector<int> v3(v2.begin(), v2.end());
vector空间增长
size()
1.获取数据个数。
vector<int> v1(10, 1);
cout << v1.size() << endl; //10
capacity
1.获取数据容量大小。
vector<int> v1(10, 1);
cout << v1.capacity() << endl;//10
empty
1.判断容量是否为空。
vector<int> v1(10, 1);
cout << v1.empty() << endl; //false
resize & reserve
1.reserve只负责开辟空间,只会扩大,不会缩小(vs2022)。
2.resize()在开辟空间的时候还会进行初始化,影响size。
void test_vector2() {
vector<int> v1(10, 1);
cout << v1.size() << endl; //10
cout << v1.capacity() << endl;//10
v1.reserve(20);
cout << v1.size() << endl; //10
cout << v1.capacity() << endl;//20
v1.reserve(15);
cout << v1.size() << endl; //10
cout << v1.capacity() << endl;//20
v1.reserve(5);
cout << v1.size() << endl; //10
cout << v1.capacity() << endl;//20
}
vector增删查改
push_back
1.在v1的末尾插入元素10。
void test_vector() {
vector<int> v1(10,1);
v1.push_back(10);
}
pop_back
1.在v1的末尾进行删除元素。
void test_vector() {
vector<int> v1(10,1);
v1.pop_back(10);
}
find
1.这是属于algorithm头文件的函数。
2.查找成果,返回这个数据第一次出现的迭代器,否则返回end()。
void test_vector() {
vector<int> v1(10,1);
auto it = find(v1.begin(), v1.end(), 1);
cout << *it << endl;
}
insert
1.在对应的位置插入数据。
2.在使用迭代器插入数据时,要保证迭代器没有变化,防止造成迭代器失效。
void test_vector() {
vector<int> v1(10,1);
auto it = find(v1.begin(), v1.end(), 1);
//在对应的迭代器前插入数据
v1.insert(it, 0);
}
erase
1.删除对应迭代器的元素。
2.在使用迭代器删除数据时,要保证迭代器没有变化,防止造成迭代器失效。
void test_vector() {
vector<int> v1(10, 1);
auto it = find(v1.begin(), v1.end(), 1);
v1.erase(it);
}
swap
1.交换两个vector的数据空间。
void test_vector() {
vector<int> v1(10, 1);
vector<int> v2(10, 2);
v1.swap(v2);
}
二维
1.在vector中嵌入vector。
2.v1中存储5个数据1。
3.v2中存储10个v1。
void test_vector() {
//10行5列
vector<int> v1(5, 1);
vector<vector<int>> v2(10, v1);
v2[2][1] = 3;
v2.operator[](2).operator[](1) = 3;
for (size_t i = 0; i < v2.size(); ++i) {
for (size_t j = 0; j < v2[i].size(); ++j) {
cout << v2[i][j] << " ";
}
cout << endl;
}
}
vector<vector<int>> generate(int numRows) {
vector<vector<int>> col(numRows);
for (int i = 0; i < numRows; ++i) {
vector<int> row(i + 1);
col[i] = row;
}
}
遍历
1.通过索引下标进行遍历(像数据一样访问)。
2.通过迭代器进行遍历。
3.通过增强for进行遍历(本质还是进行迭代器遍历)
//初始化10个值为1的v2
vector<int> v2(10, 1);
vector<int> v3(v2.begin(), v2.end());
for (size_t i = 0; i < v3.size(); ++i) {
cout << v3[i] << " ";
}
cout << endl;
vector<int>::iterator it = v3.begin();
while (it != v3.end()) {
cout << *it << " ";
it++;
}
cout << endl;
for (auto e : v3) {
cout << e << " ";
}
cout << endl;
operator[] & at
at()和operator[]都是根据下标获取任意位置元素的,在debug模式下两者都会去做边界检查。
当发生越界行为时,at时抛异常,operator[]内部的assert会触发。

觉得我回答有用的话,记得点个关注哟!谢谢支持!
更多推荐

所有评论(0)