①结构体
百度百科上对于结构体的解释是:结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
我们来说说结构体的具体作用是什么:
I.在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。

II.结构体在函数中的作用不是简便, 最主要的作用就是封装。 封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

接下来演示一下结构体的定义和使用方法等。

//结构体的定义
struct Student{      //声明一个结构体类型Student 
 int num;         //声明一个整形变量num 
 char name[20];   //声明一个字符型数组name 
 char sex;        //声明一个字符型变量sex 
 int age;         //声明一个整形变量age 
 float score;     //声明一个单精度型变量 
 char addr[30];   //声明一个字符型数组addr 
}

//定义结构体变量
#include<iostream>
using namespace std;
int main(){
 struct Student{      //声明一个结构体类型Student 
  int num;         //声明一个整形变量num 
  char name[20];   //声明一个字符型数组name 
  char sex;        //声明一个字符型变量sex 
  int age;         //声明一个整形变量age 
  float score;     //声明一个单精度型变量 
     char addr[30];   //声明一个字符型数组addr 
   };
   Student student1,student2;// 定义结构体类型变量student1和student2
   cout<<sizeof(Student)<<endl;
   cout<<sizeof(student1)<<endl;
   cout<<sizeof(student2)<<endl;     
   return 0;
}

在C语言中,结构体是不允许存在函数的,而在C++中是允许的,那么我们来谈一下C++中结构体和类的区别:

类与结构体在C++中有三点区别。
(1)class中默认的成员访问权限是private的,而struct中则是public的。
(2)从class继承默认是private继承,而从struct继承默认是public继承。
(3)C++的结构体声明不必有struct关键字,而C语言的结构体声明必须带有关键字(使用typedef别名定义除外)。

②容器
网上查阅资料得知: 容器是用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型。
C++中有两种类型的容器,顺序容器和关联容器。
顺序容器主要有vector等,由于vector用得比较多,故本文主要介绍vector的使用方法。
vector基于模板实现,需包含头文件vector。

迭代器简介

除了使用下标来访问vector对象的元素外,标准库还提供了访问元素的方法:使用迭代器。迭代器是一种检查容器内元素并且遍历元素的数据类型。


1.容器的iterator类型

每种容器类型都定义了自己的迭代器类型,如vector:

vector<int> ::iterator iter;变量名为iter。


2.begin和end操作

每种容器都定义了一队命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的元素指向第一个元素。

vector<int>::iterator iter=v.begin();

若v不为空,iter指向v[0]。

由end返回的迭代器指向最后一个元素的下一个,不存在,若v为空,begin和end返回的相同。

*iter=0;

iter++即将迭代器向前移动一个位置

即将v[0]赋值为0,由end返回的不允许进行解操作。

==和!=操作符来比较两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不想等。

迭代器使用举例:

for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)

*iter=0;

将vector中的元素全部赋值为0;


//1.定义和初始化
    vector<int> vec1;    //默认初始化,vec1为空
    vector<int> vec2(vec1);  //使用vec1初始化vec2
    vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2
//2.常用操作方法
    vec1.push_back(100);            //添加元素
    int size = vec1.size();         //元素个数
    bool isEmpty = vec1.empty();    //判断是否为空
    cout<<vec1[0]<<endl;        //取得第一个元素
    vec1.insert(vec1.end(),5);    //从vec1.back位置插入值为5的元素
    //vec1.pop_back();              //删除末尾元素
    cout<<(vec1==vec2)?true:false;  //判断是否相等==、!=、>=、<=...
    vector<int>::iterator iter = vec1.begin();    //获取迭代器首地址
    vector<int>::const_iterator c_iter = vec1.begin();   //获取const类型迭代器
    //vec1.clear();                 //清空元素
 
    //3.遍历
    //下标法
    int length = vec1.size();
    for(int i=0;i<length;i++)
    {
       cout<<vec1[i];
    }
    cout<<endl<<endl;
    //迭代器法
    vector<int>::const_iterator iterator = vec1.begin();
    for(;iterator != vec1.end();iterator++)
    {
       cout<<*iterator;
    }