C++ 菜鸟之路 (三) Vector 的使用 与 csv文件读写

Vector 的基本用法

在c++中,vector 是一个十分有用的容器, 相比一般的数组可一方便的进行插入和删除, 可以方便的查询相关的信息和清空。

(1)头文件#include<vector>.

(2)创建vector对象,vector<int> vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

(5)使用迭代器访问元素. 
        vector<int>::iterator it;
        for(it=vec.begin();it!=vec.end();it++)
            cout<<*it<<endl; // 指针指向每个元素
(6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

(7)删除元素:    vec.erase(vec.begin()+2); //删除第3个元素 

    vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:vec.size();   // 查询整个容器的大小

(9)清空:vec.clear();      // 清空容器

Vector 的相关算法使用

reverse将元素翻转

#include<algorithm>

reverse(vec.begin(),vec.end());将元素翻转

sort排序

升序排列

#include<algorithm>,

sort(vec.begin(),vec.end()); //默认是按升序排列

降序排列

bool Comp(const int &a,const int &b)
{
    return a>b;
}

sort(vec.begin(),vec.end(),Comp);

vector < vector < string> > 双层vector使用

二维 Vector 相当于一个二维数组,只需要先将一个个 vector 组装好,在加到外围的 Vector 即可。

std::vector<std::vector<std::string>>& vAllRow

while(读取数据到r中)
{
std::vector<std::string> vRow;
vRow.clear();

vRow.push_back(r[0]);
vRow.push_back(r[1]);
vRow.push_back(r[2]);
vRow.push_back(r[3]);
vRow.push_back(r[4]);
vRow.push_back(r[5]);

vAllRow.push_back(vRow);
}

数据存储在了vAllRow中,下面将读取其中的数据显示出来

vector<vector<std::string>>::iterator item2v = vAllRow.begin();
while(item2v !=vAllRow.end())
{
vector<std::string>::iterator item = (*item2v).begin();
while(item != (*item2v).end())
{
cout<<*item<<"\t";
item++;
}
std::cout<<std::endl;
item2v++;
}

文件处理与Vector应用

主要是尝试在文件中记录和读取信息,中间用到了vector

#include<iostream>
#include<string>
#include<fstream>  // 文件流
#include<sstream>
#include<vector>

using namespace std;

int main()
{
    //写文件
    ofstream outFile;
    outFile.open("data.csv", ios::out);
    outFile << "name" << ',' << "age" << ',' << "hobby" << endl;
    outFile << "Mike" << ',' << 18 << ',' << "paiting" << endl;
    outFile << "Tom" << ',' << 25 << ',' << "football" << endl;
    outFile << "Jack" << ',' << 21 << ',' << "music" << endl;
    outFile.close();


    //写文件
    ifstream inFile("data.csv", ios::in);
    string lineStr;
    vector< vector<string> > strArray; //vector 类型文string
    while(getline(inFile, lineStr)) // 从 inFile 中读取一行, 放到 lineStr 中
    {
        cout<< lineStr<<endl;

        stringstream ss(lineStr); //读取内容放置在 ss流 中, 括号相当于初始化
        string str;
        vector<string> lineArray;  
        // 按照逗号分隔
        while(getline(ss, str, ',')) // ss 中, 按照 “,” 逗号分割将ss 分割成一个个str
        {
            lineArray.push_back(str);   // 将字符串放置到 line Array
            cout<< str<<endl;
        }
        strArray.push_back(lineArray);
    }
    getchar();
    return 0;
}

总结

这个小练习主要总结了一下几个知识点:

(1) vector<string> vec 初始化  vector.begin() 起始点, 
    vector.end() 终止点, vector.push_back(str) 推入容器中, vector.clear() 清空容器
(2) vector < vector < string> > Vec; // 二维 Vector,
(3) vector<std::string>::iterator item = (*item2v).begin(); // vector 具有 iterator 属性,
    可以基于此进行迭代。 *item, *item++ 等。

(4) 写文件的方法:     //写文件

    ofstream outFile;
    outFile.open("data.csv", ios::out);  // 打开文件
    outFile << "name" << ',' << "age" << ',' << "hobby" << endl;
    outFile.close();
(5) 读文件的方法:
    ifstream inFile("data.csv", ios::in);
    lineArray.push_back(str);
(6)  获取当前时间戳
     #include<ctime>
     cout<<time(NULL)<<endl;

猜你喜欢

转载自blog.csdn.net/Fourier_Legend/article/details/81742781