容器(container):可容纳一些数据的模板类,STL中有vector、set、map、multimap和deque等容器。
游标(iterator):是一个指针,用来指向STL容器中的元素。
#include
vector属于std命名域的,使用全局的命名域方式:
using namespace std;
vector<int> v;
等价于
std::vector<int> v;
vector c;//创建一个空的vector
vector c1(c2);//创建一个vector c1,并用c2初始化c1
vector c(n);//创建一个含有n个ElemType类型数据的vector
vector c(n,elem);//创建一个含有n个ElemType类型数据的vector,并全部初始化为elem
c.~vector ();//销毁所有数据,释放资源
下标 | 值 |
---|---|
0 | 11 |
1 | 45 |
2 | 13 |
3 | 88 |
c.begin()是一个指针,指向内存中的值为2,注意c.end()指向内存中的值不是88;
c.push_back(elem);//在容器最后位置添加一个元素elem
c.pop_back();//删除容器最后位置处的元素
c.at(index);//返回指定index位置处的元素
c.begin();//返回指向容器最开始位置数据的指针
c.end();//返回指向容器最后一个数据单元的指针+1
c.front();//返回容器最开始单元数据的引用
c.max_size();//返回容器的最大容量
c.size();//返回当前容器中实际存放元素的个数,同c.capacity()
c.erase(p);//删除指针p指向位置的数据,返回指向下一个位置的指针
c.clear();//清除所有数据,capacity保持不变,size变成0
c.empty();//判断容器是否为空,若为空返回true,否则返回false
c1.swap(c2);//交换两个容器中的数据,两个容器的size一定相等,capacity可以不等
c.insert(p,elem);//在指针p指向的位置插入数据elem,返回指向elem位置的指针
c.insert(p,n,elem);//在指针p指向的位置插入n个elem数据,无返回值
c.insert(p,begin,end); //在位置p插入在区间[begin,end)的数据,无返回值
c.rbegin();//将vector反转后的开始指针返回(其实就是原来的end-1)
c.rend();//将vector反转后的结束指针返回(其实就是原来的begin-1)
#include
#include
#include
using namespace std;
int main()
{
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.insert(v.begin(), 8);//在下标为0的元素前面插入新元素
v.insert(v.begin() + 2, 40);//在下标为2的元素前面插入新元素
v.insert(v.end(), 50);//在向量末尾追加新元素
/********遍历容器内的值***********/
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
//----------------------------------/
system("pause");
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
int i, n;
vector<int> v;
for (i = 0; i < 5; i++) {
scanf_s("%d", &n);
v.push_back(n);//push_back(n)将元素添加到数组最后
}
for (i = 0; i < v.size(); i++) {
printf("%d ", v[i]);
}
printf("\n");
v.pop_back();//pop_back()将数组最后一个元素删除
for (i = 0; i < v.size(); i++) {
printf("%d ", v[i]);
}
printf("\n");
system("pause");
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
int i, n;
vector<int> v;
vector<int>::iterator it;//声明一个vector的迭代器
for (i = 0; i < 10; i++) {
scanf_s("%d", &n);
v.push_back(n);
}
for (i = 0; i < v.size(); i++) {
printf("%d ", v[i]);//第一种方法,访问通过操作[]
}
printf("\n");
for (i = 0; i < v.size(); i++) {
printf("%d ", v.at(i));//第二种方法,通过at(index)函数
}
printf("\n");
for (it = v.begin(); it != v.end(); it++) {
printf("%d ", *it);//第三种方法,通过迭代器iterator访问
}
printf("\n");
system("pause");
return 0;
}
#include
#include
#include
#include
using namespace std;
int main()
{
int i, n;
vector<int> v;
vector<int>::iterator it;//声明一个vector的迭代器
for (i = 0; i < 10; i++) {
scanf_s("%d", &n);
v.push_back(n);
}
it = find(v.begin(), v.end(), 3);//进行查找元素3
if (v.end() == it) {//若无该元素,则返回指向容器最后一个单元+1的指针
printf("该元素不存在于容器中!\n");
}
else {
printf("%d\n", it - v.begin());
}
sort(v.begin(), v.end());//升序进行排序,开始位置到结束位置数值依次增大
reverse(v.begin(), v.end());//降序进行排序,开始位置到结束位置数值依次减小
system("pause");
return 0;
}
#include
#include
using namespace std;
int main()
{
int i, j,m;
vector< vector<int> > v;
vector<int> v1;
for (i = 0; i < 4; i++) { //使用二维容器之前一定要对其进行初始化否则会出错
v.push_back(v1);
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
scanf_s("%d", &m);
v[i].push_back(m);
}
}
printf("%d\n", v.size());
for (i = 0; i < v.size(); i++) {
for (j = 0; j < v[i].size(); j++) {
printf("%d ", v[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}