容器

来源:互联网 发布:斗地主残局软件 编辑:程序博客网 时间:2024/05/26 05:51
容器的初始化和遍历:

#include<iostream>
using namespace std;
#include "vector"
void printV(vector<int> &v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
}
void main33() //数组形式的遍历赋值
{
//vector遍历
vector<int> v1(10);   //提前把内存准备好
// vector<int> v1;   //这种方法下面遍历出错
for (int i = 0; i < 10; i++)
{
v1[i] = i + 1;    //用这种方法,必须在定义的时候说是10个元素
}
printV(v1);
printf("\n");
}
void main34()
{
vector<int> v1(10);
printf("vector<int> v1(10)容器的大小为:%d\n",v1.size());
v1.push_back(100);
v1.push_back(200);
printV(v1);
printf("\n");
}
void main35()//迭代器形式的赋值和遍历

//vector遍历
vector<int> v1;   //提前把内存准备好 里面没有任何东西也没分配内存
   v1.push_back(100);
v1.push_back(200);
vector<int> :: iterator  it;
     int i=0;
// vector<int> v1;   //这种方法下面遍历出错
for (it = v1.begin(); it!=v1.end(); it++,i++)
{
*it=i+1;    
}
printV(v1);
printf("\n");
}
void main36() //数组形式的遍历赋值
{
//vector遍历
vector<int> v1 ;   //提前把内存准备好
int j=0;
printf("压入元素前vector<int> v1容器的大小为%d\n",v1.size());
v1.push_back(100),j++;
v1.push_back(200),j++;
v1.push_back(300),j++;
printf("压入%d元素后,vector<int> v1容器的大小为%d\n",j,v1.size());
// vector<int> v1;   //这种方法下面遍历出错
for (int i = 0; i < v1.size(); i++)
{
v1[i] = i + 1;    //用这种方法,这时候不是必须分配10个内存了 只要分配空容器后然后压进去元素压进去一个时候会给容器分配相应的内存空间
}
printV(v1);
printf("\n");
}


void main()
{  main33();
main34();
main35();
main36();
return;
}
/*
main33结果是:1 2 3 4 5 6 7 8 9 10
vector<int> v1(10)容器的大小为:10
main34结果是:0 0 0 0 0 0 0 0 0 0 100 200  12个元素了
main35结果是:1 2
压入元素前vector<int> v1容器的大小为0
压入3元素后,vector<int> v1容器的大小为3
main36结果是:1 2 3


vector<int> v1 ;  //只声明了个空容器还没有为容器分配内存次数不能直接用数组的形式赋值或修改或访问,此时容器长度为0
//只有在push_back压入元素的时候才分配内存的,此事可以直接用数组的形式赋值或修改或访问。但长度是压入元素的个数
vector<int> v1(10) ; //分配了10个内存的容器,此时容器长度为10可以直接用数组的形式赋值或修改或访问.

总结:以vector<int> v1(10);指定长度定义的容器一般就以数组的形式操作  如果没有指定长度定义的数组则用函数和迭代器的形式操作  push_back函数压入

*/


vector<int>::iterator it = v1.begin(); //v1.begin();和迭代器一样都是指针。


2、擦除函数erase

#include<iostream>
using namespace std;
#include "vector"
void printV(vector<int> &v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
}
/*
main36结果是:4 5 6 7 8 9 10 (区间删除)
                5 6 7 8 9 10(指定位置删除)
 2 2 3 2 5 6 7 8 9 10(根据元素的值)
 3 5 6 7 8 9 10
 100 3 5 6 7 8 9 10 200(vector的插入)
*/
//vector删除
void main36()
{
vector<int> v1(10);
for (int i = 0; i < 10; i++)
{
v1[i] = i + 1;   
}
//区间删除
v1.erase(v1.begin(), v1.begin() + 3);  //删除前三个元素
//指定位置删除
    v1.erase(v1.begin());
//根据元素的值
v1[0] = 2;
v1[3] = 2;
printV(v1);
cout << endl;
for (vector<int>::iterator it = v1.begin(); it != v1.end();)
{
if (*it ==2)
{
// it=v1.erase(it);   //当删除迭代器所指向的元素的时候,erase删除函数会让it自动移动;   必须加左值it
v1.erase(it); //不加it也行
}
else
{
it++;
}
}
printV(v1);
cout << endl;
//vector的插入
v1.insert(v1.begin(), 100);
v1.insert(v1.end(), 200);
printV(v1);
}


void main()
{
main36();
return;
}


//实际运行结果
/*2 6 7 2 9 10
6 7 9 10
100 6 7 9 10 200 Press any key to continue
*/
/*


总结:erase擦除函数真的把元素彻底擦除了且杀掉一个元素后面元素会自动往前移动 容器长度会减1
v1.begin()指向头元素之前 v1.end()指向尾元素之后

1、vector是将元素置于一个动态数组中加以管理的容器。

2、vector可以随机存取元素。

3、vector尾部添加或移除元素非常快速,但是在中部或头部插入或移除元素比较费时。(因为假如把原来的3号元素删除后,后面大量的元素一个一个往前移)





*/
0 0
原创粉丝点击