【C++入门】7.C++ vector的常见用法( 快速解析 )
·
文章目录
学习了上节string之后,再学习vector会容易很多,他们有很多相似的函数。
1. vector的介绍
vector有点类似C语言的数组,vector使用连续的存储位置来存储其元素
但与数组不同的是,其大小可以动态变化,存储空间由容器自动管理。
2. vector的定义

vector<typename> v;
上面相当于是定义一维数组v[ ],只不过它的类型可以改变,不仅可以是基本类型int,char,float等还可以是string,vector等标准容器。
下面是定义二维vector数组
vector<vector<int>> v(num);

3. vector的初始化
1.花括号直接赋值
vector<int> v{ 1,2,3 };//初始化v为1 2 3
2.圆括号直接赋值
vector<int> v(5);//初始化v为5个0
vector<int> v(5,1);//初始化v为5个1
4. vector的遍历及迭代器的操作
| 接口名称 | 使用说明 |
|---|---|
| operator[] | 小标 + [] |
| at(了解) | 小标 + () |
| 迭代器 | begin() + end() 或者 rbegin() + rend() |
| 范围for | C++11支持更简单的for遍历(底层还是借用迭代器实现) |
①operator[]
对于vector访问最常见的还是对象+[ ]
vector<int> v{ 1,2,3 };v[0] = 1,v[1] = 2,v[2] = 3,
②at

at与成员 operator[] 不同,operator[] 不进行边界检查,可能会越界访问,at不会。

③迭代器
| 接口名称 | 使用说明 |
|---|---|
| begin() | 返回指向第一个元素的迭代器 |
| end() | 返回指向最后一个元素的下一个位置的迭代器 |
| rbegin() | 返回指向最后一个元素的反向迭代器 |
| rend() | 返回指向第一个元素的前一个位置的反向迭代器 |

使用begin,end函数类似于使用指针一样可以访问对象内容
vector<int> v(5, 3);//初始化5个3 //正向迭代器遍历容器 vector<int>::iterator it = v.begin(); while (it != v.end()) { cout << *it << " "; it++; } cout << endl; return 0; }

④范围for
这个书写最方便,底层还是迭代器实现的
5. vector常见操作
①.push_back()
v.push_back(x):在vector容器v后面添加一个元素x

②.pop_back()
v.push_back():在vector容器v后面删除最后一个元素
vector<int> v(5,1);
v.pop_back();
//v 变成 1 1 1 1 删除了最后一个1
③.insert()
insert重载很多,感兴趣可以去文档查询

int main()
{
int a[] = { 1,2,3,4,5 };
vector<int> v(a, a + 5);
// 在第一个位置插入一个10
v.insert(v.begin(), 10);
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
// 在最后一个位置插入5个8
v.insert(v.end(), 5, 8);
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
return 0;
}

④.erase()
erase()有两种用法:删除指定位置单个元素、删除一个区间内所有元素。

int main()
{
vector<int> v{1,2,3,4,5,6};
// 删除指定位置的元素
v.erase(v.begin());
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
// 删除指定区间的元素
v.erase(v.begin(), v.begin() + 2);
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
return 0;
}

⑤.swap()

交换两个容器内容
int main()
{
vector<int> v1(3, 1);
vector<int> v2(6, 1);
swap(v1, v2);
for (auto ch : v1)
{
cout << ch << " ";
}
cout << endl;
for (auto ch : v2)
{
cout << ch << " ";
}
cout << endl;
return 0;
}

⑥.find()
查找操作。需要注意:这个不是 vector 成员函数的接口,这个是算法库里面的,把它放在这里是因为它可以和下面的 insert、erase操作配合使用
可以看到它的功能是:在一个迭代区间里面去寻找特定的val,如果找到这个元素,那就返回当前位置的迭代器;如果找不到,那就返回迭代区间的最后一个位置迭代器
int main()
{
int a[] = { 1,2,3,4,5,1,2,5,8,6 };
vector<int> v(a, a + 10);
vector<int>::iterator pos = find(v.begin(), v.end(), 3);
if (pos != v.end())
{
v.erase(pos);
}
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
return 0;
}

更多推荐





所有评论(0)