二維向量vector的使用
阿新 • • 發佈:2019-02-08
定義:
//二維向量的定義 vector< vector<int> > b(10, vector<int>(5,0)); //建立一個10*5的int型二維向量b vector<vector<int> > b;//建立一個未知大小的int型二維向量b, //card為自定義結構體或類 vector< vector< card > > AIcards( 4, vector< card >( 13 ) ); //二維向量全部初始化為零: int m=str1.size(); int n=str2.size(); vector<vector<int>>dp(m+1,vector<int>(n+1,0));
注意:
使用低版本VS可能會出現“error C2146: syntax error : missing ',' before identifier”的錯誤
解決辦法就是如下定義
vector<vector<int>/**/>
經過測試,把/**/換成空格也可以,也就是隻要不影響詞法語法,最後兩個 ' > ' 之間新增上一些東東把它們分開即可。
示例程式碼:
二維向量的屬性與一維向量相同vector<vector<int> > Pos_X; vector<vector<int> > Pos_Y; void Readdotpos() { CString filename[12]; //檔案中儲存的是座標資料 int xx,yy; for (int i=0;i<3;i++) { filename[i].Format("E:\\座標\\IMG_00%i.abs", i); Pos_X.push_back(vector<int>());//增加一維計數 Pos_Y.push_back(vector<int>());//增加一維計數 CString contents; char *ssss, *xyz, tttt[20]; ssss=new char[50]; CStdioFile m_file(filename[i],CFile::modeRead); while (m_file.ReadString(contents))//按行讀取檔案資料 { strcpy(ssss,contents); xyz=strstr(ssss,"x=" ); if(xyz!=NULL){ strncpy(tttt,xyz+2,4);xx=(int)atoi(tttt);} else xx=0; xyz=strstr(ssss,"y=" ); if(xyz!=NULL){ strncpy(tttt,xyz+2,4);yy=(int)atoi(tttt);} else yy=0; Pos_X.back().push_back(xx);//儲存資料 Pos_Y.back().push_back(yy);//儲存資料 } delete ssss; m_file.Close(); }
1>. a.size() //獲取向量中的元素個數 2>. a.empty() //判斷向量是否為空 3>. a.clear() //清空向量中的元素 4>. 複製 a = b ; //將b向量複製到a向量中 5>. 比較 保持 ==、!=、>、>=、<、<= 的慣有含義 ; 如: a == b ; //a向量與b向量比較, 相等則返回1 6>. 插入 - insert ①、 a.insert(a.begin(), 1000); //將1000插入到向量a的起始位置前 ②、 a.insert(a.begin(), 3, 1000) ; //將1000分別插入到向量元素位置的0-2處(共3個元素) ③、 vector<int> a(5, 1) ; vector<int> b(10) ; b.insert(b.begin(), a.begin(), a.end()) ; //將a.begin(), a.end()之間的全部元素插入到b.begin()前 7>. 刪除 - erase ①、 b.erase(b.begin()) ; //將起始位置的元素刪除 ②、 b.erase(b.begin(), b.begin()+3) ; //將(b.begin(), b.begin()+3)之間的元素刪除 8>. 交換 - swap b.swap(a) ; //a向量與b向量進行交換 9>. a.back(); //獲取a向量最後一個元素 10>. a.front //獲取a向量的第一個元素 11>. a.pop_back(); //刪除a向量的最後一個元素 12>.a.capacity(); //返回a在記憶體中總共可以容納的元素個數 13>.a.rezize(10); //將a的現有元素個數調至10個,多則刪,少則補,其值隨機 14>.a.rezize(10,2); //將a的現有元素個數調至10個,多則刪,少則補,其值為2 //使用下面的函式需要包涵標頭檔案 #include<algorithm> (1)sort(a.begin(),a.end()); //對a中的從a.begin()(包括它)到a.end()(不包括它)的元素進行從小到大排列 (2)reverse(a.begin(),a.end()); //對a中的從a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素為1,3,2,4,倒置後為4,2,3,1 (3)copy(a.begin(),a.end(),b.begin()+1); //把a中的從a.begin()(包括它)到a.end()(不包括它)的元素複製到b中,從b.begin()+1的位置(包括它)開始複製,覆蓋掉原有元素 (4)find(a.begin(),a.end(),10); //在a中的從a.begin()(包括它)到a.end()(不包括它)的元素中查詢10,若存在返回其在向量中的位置