CPP_3_简单到极致的Vector容器

Urna Semper

张一极

201992

Vector

from CPP

最基本的标准容器,vector是一个模板,更简单的说,他是一个容器,可以容纳任何类型的,对应的类型,假如说是string 那么对应的数据就是vector<string>,但是如果装其他的类型的数据,那么编译器会给出错误,既然是一个容器,需要有定义好的放进去的方法,那么这个方法用“ . ”调用,push_back调用,例子:

#include<iostream>

#include<string>

#include<vector>

#include<fstream>

using namespace std;

int main(){

vector<string> v;

ifstream in(“e.cpp”);

string line;

while(getline(in,line))

v.push_back(line);

for(int i =0;i<v.size();i++)

{

cout<<i<<“: “<<v[i]<<endl;

}

}

解读:首先解读入口代码,实例化了一个vector其类型为string,变量名为v,v进行调用,在一个ifstream,说到ifstream.

ifstream是文件读取操作,把储存区文件读取到内存中,其打开方式有:

os::in

为输入()而打开文件

ios::out

为输出()而打开文件

ios::ate

初始位置:文件尾

ios::app

所有输出附加在文件末尾

ios::trunc

如果文件已存在则先删除该文件

ios::binary

二进制方式

我们代码中默认方式读取即可,可以用成员函数is_open()查看是否读取,其他的方法,以后再说.

那么打开文件以后,我们设置了一个容器,一个while循环,循环是getline(in,line)为真执行,也就是逐行读取, 将行读入字符串, 行之间用回车换行区分,如果getline的返回值为真,那么执行语句就是将string类型的line压入vector的尾部.后续我们使用一个for循环来循环输出我们需要的文字,这个循环的含义就是在i小于vector的长度的情况下,把括号内的语句执行多次,知道i超过v.size()的长度,这里呢,v.size()返回值就是v这个容器的尺寸大小或者说长度,类似我们遍历一个字符串所做的事情,可以想象,在循环跳出以后,stringline会在内存里组成文件的所有内容,而不会被释放,我们的输出就是:

code g++ h.cpp -o h

code ./h

0: #include<iostream>

1: int main(){

2: int e_,e__;

3: std::cin>>e_>>e__;

4: if (e__==e_)

5: {

6: std::cout<<“get”<<e_<<e__<<std::endl;

7: }

8:

9: }

他会输出所有我们容器v里面的内容,并且格式化输出,按照我们想要的.

假如我们要复杂一些,在用户输入某些字符的时候,打印文件,我们首先要定义出这个字符:

string a;

然后我们要在打印的前面多一条判断,工具化的使用它.

if(a==“out”){

for(int i =0;i<v.size();i++)

{

cout<<i<<“: “<<v[i]<<endl;

}

}

后续我们需要无限循环的读取用户的输入:

while(cin>>a)

{

if(a==“out”)

{

for(int i =0;i<v.size();i++)

{

cout<<i<<“: “<<v[i]<<endl;

}

}

}

每一个while循环都会判断用户输入,而不是直接打印,先通过cin获取用户输入流,而通过if判断用户输入是否匹配我们定义的out,如果匹配,才会打印出来,其完整:

#include<iostream>

#include<string>

#include<vector>

#include<fstream>

using namespace std;

int main(){

vector<string> v;

ifstream in(“e.cpp”);

string line;

while(getline(in,line))

v.push_back(line);

string a;

while(cin>>a){

if(a==“out”){

for(int i =0;i<v.size();i++)

{

cout<<i<<“: “<<v[i]<<endl;

}

}

}

}

结果:

code g++ h.cpp -o h

code ./h

a

s

sda

out

0: #include<iostream>

1: int main(){

2: int e_,e__;

3: std::cin>>e_>>e__;

4: if (e__==e_)

5: {

6: std::cout<<“get”<<e_<<e__<<std::endl;

7: }

8:

9: }

如果要打印某一行,则使用vector[i]即可,i为元素组织下标.

下面我们使用vector创建一个int类型的容器,并输入对应数据,输出对应数据.

#include<iostream>

#include<string>

#include<vector>

#include<fstream>

using namespace std;

int main(){

vector<int> h_;

int data_;

for(int i_ = 0;i_<10;i_++){

cin>>data_;

h_.push_back(data_);

cout<<h_[i_]<<endl;

}

}

运行之后,会循环十次,每一次让用户输入自己需要的数值,并压入vector,之后立刻将vector里面的存入元素读取出来并打印,属于最简单的一个int类型的容器的demo.

结果:

code g++ h.cpp -o h

code ./h

9

9

2

2

3

3

4

4

5

5

amazing.

此条目发表在ALL, CPP分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注