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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章