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;