I/O Streams;Vector and Grid
I/O Streams
#incldue<fstream>
类层次关系

操作方式
- 创建文件流对象
- 打开磁盘文件
- 将该文件流对象与指定文件建立关联,使文件流能流向指定的磁盘文件
- 指定工作方式
- 实现方式:
调用成员函数 open,如下 eg
object.open(文件路径,I/O模式);
创建文件流对象时指定参数
class_name object(文件路径,I/O模式);
- 输入输出
- 每次读写都从文件指针的当前位置开始,读入一个字节,指针就后移一个字节,读写至文件结束符停止
- 输入流常用方法

- 关闭磁盘文件
eg:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| //getline整行读入 #include <iostream> #include<string> #include<fstream> using namespace std;
int main() { ifstream input; input.open("./files/hello.txt"); if (input.fail()) { cout << "error!" << endl; } string line; while (getline(input, line)) { cout << line << endl; //getline从输入流中读入整行字符,存到string变量,返回值类型为bool } input.close(); }
|
1 2 3 4 5
| //>>流提取运算符逐个word读入 while (input >> line) { cout << line << endl; }
|
Vector
STL Vector
vector 是向量类型,它可以容纳许多类型的数据,所以称其为容器,是由 STL 提供的一种序列式容器,它的底层其实就是一个动态数组。
vector 常用构造函数
| |
| :-: | :-: |
| vector(); | 创建一个没有任何元素的空向量 |
| vector(vector&& _Right); | 创建一个向量,并使用向量_Right 初始化该向量 |
| vector(size_type Count); | 创建一个大小为 Count 的向量 vect |
| vector(size_type Count,const Type& Val); | 创建一个大小为 Count 的向量,该向量中所有的元素都初始化为 Val |
| template vector(InputIterator _first,InputIterator _last); | 创建一个向量,并以迭代器_first 和_last 之间的元素初始化该向量 |
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<vector> //需要包含头文件 a.assign(c.begin(), c.begin() + 3); //将c的0~2个元素构成的向量赋给a a.assign(4, 2); //a只含4个元素,且每个元素为2 a.back(); //返回a的最后一个元素; a.front(); //返回a的第一个元素 a[i];//返回a的第i个元素,当且仅当a[i]存在,才可使用下标索引 a.clear(); //清空a中的元素 a.empty(); //判断a是否为空,空则返回ture,不空则返回false a.pop_back(); //删除a向量的最后一个元素 a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5 a.erase(a.begin() + 1, a.begin() + 3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它) a.insert(a.begin() + 1, 5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4 a.insert(a.begin() + 1, 3, 5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5 a.insert(a.begin() + 1, b + 3, b + 6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8 a.size(); //返回a中元素的个数; a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机 a.resize(10, 2); //将a的现有元素个数调至10个,多则删,少则补,其值为2 a.swap(c); //c为向量,将a中的元素和c中的元素进行整体性交换
|
二维向量
1 2
| vector <int*> a; vector <vector <int>> b; //二维向量由若干一维向量组成
|
向量的遍历
- 下标
- 遍历器
1 2
| for(vector<int>::iterator it=b.begin();it!=b.end();it++) cout<<*it<<" ";
|
- for
1
| for (type x : vector) {x...} //x需要与vector类型一致
|
重要算法
1 2 3 4 5 6 7 8
| #include<algorithm> sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开 始复制,覆盖掉原有元素
find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
|
Standford C++ library SPL vector
定义:

方法

Grid 网格
定义:

方法:

遍历:

!!!大作业待完成