C++中vector的用法详解及操作指南

需积分: 49 9 下载量 58 浏览量 更新于2024-09-09 收藏 8KB TXT 举报
C++中的`#include<vector>`是用于引入标准模板库(Standard Template Library, STL)中的向量容器(Vector)的关键字。向量是一种动态数组,它允许在运行时动态增加或减少元素,提供了高效的内存管理和元素访问。本文将详细介绍如何在C++代码中使用`std::vector`以及其主要操作方法。 首先,`#include<vector>`确保编译器知道要使用STL中的vector类型,这是编写包含向量操作的程序的基础。在C++中,`<vector>`头文件定义了模板类`std::vector<T>`,其中`T`是一个类型参数,可以是任何用户自定义类型,如`int`, `float`, `string`等。 1. **创建向量对象**: - `Vector<T> v1;`:默认初始化一个空向量,容量根据类型`T`的默认构造函数确定。 - `Vector<T> v2(v1);`:浅拷贝,创建一个新的向量并将`v1`的所有元素复制到新向量中。 - `Vector<T> v3(n, i);`:通过指定元素个数`n`和初始值`i`创建向量,向量的前`n`个元素都设置为`i`。 - `Vector<T> v4(n);`:同样,初始化一个大小为`n`的向量,但不提供初始值,元素默认为默认构造的值。 2. **基本操作**: - `v.push_back(t)`:在向量尾部添加一个元素`t`。 - `v.size()`:返回向量中元素的数量。 - `v.empty()`:检查向量是否为空,如果为空则返回`true`,否则返回`false`。 - `v[n]`:访问第`n`个元素,从0开始计数。 - `v1 = v2`:向量赋值,将`v2`的内容复制到`v1`中。 3. **迭代器与范围操作**: - `vector<string> v3(v3.begin(), v3.end());`:创建一个范围向量,包含`v3`的所有元素。 4. **成员函数**: - `bool empty() const;`:判断向量是否为空。 - `size_type max_size() const;`:返回向量最大可能容纳的元素数量。 - `size_type size() const;`:获取当前向量的元素数量。 - `size_type capacity() const;`:表示向量可容纳的元素数量,即使未全部分配。 - `void reserve(size_type n);`:预分配空间,确保后续添加元素不会频繁地进行内存扩展。 - `void resize(size_type n);`:改变向量大小,若`n`小于当前大小,删除多余元素;若`n`大于当前大小,自动分配内存。 向量在C++编程中非常实用,因为它提供了高效的数据结构,支持动态扩展和元素访问。理解并熟练运用`#include<vector>`中的各种方法,有助于编写出更灵活、性能良好的代码。在实际开发中,合理利用`reserve`和`resize`来优化内存管理,以及利用迭代器进行遍历和操作,都是非常重要的技巧。
2014-07-10 上传
#include #include struct DATA { int ID; char name[4]; char sex[3]; int score; }; void paixu(int*,DATA*,int); int sishewuru(double); void func1(int*,int*,DATA*,int*,int,int,int,int);//统计男女比例 int func2(int*,int,DATA*);//查找考生序号 void print(); void main() { int length=0,i,yiben,erben,sanben,dazhuan,male[4],female[4]; int yi,er,san,si; char input; FILE* file=fopen("f1.txt","r"),*file1; if(file==NULL) { printf("No such file!\n"); return; } while(EOF!=fscanf(file,"%*[^\n]\n")) length++;//自动计算考生数罝ATA* data=(DATA*)malloc(length*sizeof(DATA)); int* pai=(int*)malloc(length*sizeof(int)); rewind(file); for(i=0;i='0'&&input<='4')) { printf("非法输入,请重新输入\n请输入:"); fflush(stdin); } else break; } getchar(); switch(input) { case '0': printf("\n一类本科招生线:%d\n二类本科招生线:%d\三类本科招生线:%d\\n高职高专招生线:%d\n",yi,er,san,si); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取分数线.txt","w"); fprintf(file1,"一类本科招生线:%d\n二类本科招生线:%d\\n三类本科招生线:%d\n高职高专招生线:%d\n",yi,er,san,si); fclose(file1); } fflush(stdin); break; case '1': func1(male,female,data,pai,yiben,erben,sanben,dazhuan); printf("一类本科招生线男女比例:%d:%d\n",male[0],female[0]); printf("二类本科招生线男女比例:%d:%d\n",male[1],female[1]); printf("三类本科招生线男女比例:%d:%d\n",male[2],female[2]); printf("高职高专招生线招生线男女比例:%d:%d\n",male[3],female[3]); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取男女比例.txt","w"); fprintf(file1,"一类本科招生线男女比例:%d:%d\n",male[0],female[0]);