一、观看PPT教程
【01】STL介绍【02】STL向量
二、练习题(不清楚回头查看有关PPT)
【01】下面是STL的介绍,如果有错误请改正:
STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是C++提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。从根本上说,STL 是一些容器、算法和其他一些组件的集合。注意,这里提到的容器,本质上就是封装有数据结构的模板类,例如 list、vector、stack 等,有关这些容器的具体用法,后续章节会做详细介绍。在各种容器中,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用“迭代器(iterator)”来实现。那么,迭代器到底是什么呢?简单来讲,迭代器和 C++的指针非常类似,它可以是需要的任意类型,通过迭代器可以指向容器中的某个元素,如果需要,还可以对该元素进行读/写操作。注意:容器适配器 stack 和 queue 没有迭代器,它们包含有一些成员函数,可以用来对元素进行访问。【02】下面是向量的定义,如果有错误请改正:向量(vector)是c++标准库提供的一个可变长数组类型,属于容器,它可以像数组一样进行数据的存储和访问。vector 会根据需要自动扩展其自身的容量来容纳更多的数据。普通数组在定义初始大小后,其容量不可变;向量在定义初始大小后,仍可根据需要扩充容量。【03】向量声明格式是“vector<数据类型> 向量名称”,请说出下面向量的声明方法的意义:①vector<数据类型> v;②vector<数据类型> v(n);③vector<数据类型> v(n, x);④vector< vector<数据类型> > v;注:声明二维向量时最外的<>要有空格,否则在较旧的编译器下可能报错。
【04】下面是向量vector的功能测试程序,请补全缺失的注释:
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
#include<iostream>#include<vector> //using namespace std;vector<int> v; ////begin()返回指向容器中第一个元素的迭代器void testBegin(){ vector<int>::iterator it = v.begin(); cout << *it << endl;} //void testEnd(){ vector<int>::iterator it = v.end(); cout << *it << endl;}//void testRbegin(){ vector<int>::reverse_iterator it = v.rbegin(); cout << *it << endl;} //void testRend(){ vector<int>::reverse_iterator it = v.rend(); cout << *it << endl;} //void testSize() { cout << "size=" << v.size() << endl;}//遍历void print_vector(){ vector<int>::iterator it; //从左到右遍历 for(it = v.begin(); it != v.end(); it++){ cout << *it << " "; } cout << " | "; vector<int>::reverse_iterator rit; // for(rit = v.rbegin(); rit != v.rend(); rit++){ cout << *rit << " "; } cout << endl;} //通过size()遍历void print_vector_by_size(){ //从左到右遍历 for(int i = 0; i < v.size(); i++){ cout << v[i] << " "; } cout << " | "; // for(int i = v.size()-1; i >= 0; i--){ cout << v[i] << " "; } cout << endl;}/* 利用C++11遍历 */void print_vector_by_cpp11(){ //从左到右遍历 for(int x : v){ cout << x << " "; } cout << endl;}//void testFront(){ vector<int>::reference ref = v.front(); // print_vector(); ref = 3; // print_vector();}//void testBack(){ vector<int>::reference ref = v.back(); print_vector(); ref = 10; // print_vector();}//void testPush_back(){ v.push_back(200); // print_vector();}//void testPop_back(){ v.pop_back(); print_vector();}//void testEmplace() { v.emplace(++v.begin(), 200); print_vector();}//void testEmplace_back() { v.emplace_back(400); print_vector();}//void testEmpty(){ cout << "empty=" << v.empty() << endl;} //void testInsert(){ v.insert(v.begin(), 20); // print_vector(); v.insert(v.begin() + 5, 20); // print_vector(); v.insert(++v.begin(), 3, 121); // print_vector(); //建立一个新向量 int dt[] = {8,11,25,29,23}; vector<int> v2; for(int i = 0; i < 5; i++)v2.push_back(dt[i]); // v.insert(v.end(), v2.begin(), v2.end()); print_vector();}//void testErase(){ v.erase(v.begin()); // print_vector(); v.erase(++v.begin()); //删除第二个元素 print_vector(); //删除第二个到倒数第二个(包括) 元素 v.erase(++v.begin(), --v.end()); print_vector(); v.erase(v.begin(), v.end()); // print_vector();}//void testClear(){ v.clear(); print_vector();}//void testSwap(){ vector<int> v2; for(int i = 1; i < 11; i++)v2.push_back(i*i); v.swap(v2); print_vector();}
//初始化向量 void init(){ int data[] = {5,1,1,3,3,1,8,13,50}; for(int i = 0; i < 9; i++)v.push_back(data[i]);} int main(){ init(); testSize(); print_vector_by_size(); print_vector_by_cpp11(); testBegin(); testEnd(); testRbegin(); testRend(); testFront(); testBack(); testPush_back(); testPop_back(); testEmplace(); testEmplace_back(); testInsert(); testErase(); testSwap(); testClear(); testEmpty(); return 0;}
【05】编程题:二维数组的存储
【06】编程题:移动0