目錄
一、前言
二、 vector <string>? 的個(gè)人理解和總結(jié)
三、vector <string>? 的初始化
四、vector <string>?的輸入 \ 輸出
?五、vector <string>? 中的注意事項(xiàng)
?六、常考面試題
七、共勉?
一、前言
? ? ? ? 在【C++】中,vector?是一個(gè)動(dòng)態(tài)數(shù)組,它可以根據(jù)需要自動(dòng)調(diào)整自身的大小。同樣 vector<string> 表示一個(gè)由 string 組成的 vector 。string 是一個(gè)字符序列,可以理解為文本字符串。但是在平時(shí)刷 leetcode 的時(shí)候,還是搞不清楚 vector<string>的用法 ,所以通過(guò)查閱資料,將其記錄下來(lái)。
? ? ? ?如果有老鐵還不清楚 vector 的基本用法,可以看這篇文章:詳解vector
二、 vector <string> 的個(gè)人理解和總結(jié)
? ? ? 標(biāo)準(zhǔn)庫(kù)類(lèi)型 vector 表示對(duì)象的集合,其內(nèi)所有的對(duì)象類(lèi)型都相同。使用 vector 必須包含頭文件(#include <vector>)。
? ? ? 個(gè)人理解:vector 是一個(gè)類(lèi)模板,編譯器根據(jù)模板創(chuàng)建類(lèi)或函數(shù),vector<string> 就是根據(jù)模板創(chuàng)建了若干 string 對(duì)象,而 string 本身可以包含字符串,字符串可以視為若干個(gè)字符,即,vector<string> 可以視為一個(gè)a [ ][ ] 數(shù)組。可以使用輸出數(shù)組的方式來(lái)輸出vector<string> 對(duì)象內(nèi)的內(nèi)容。
三、vector <string> 的初始化
下面是如何創(chuàng)建?
vector<string>
?的一些例子:?
- 創(chuàng)建一個(gè)空的?
vector<string>
:
?vector<string> vec1;
- 創(chuàng)建包含5個(gè)空字符串的?
vector<string>
:?
?vector<string> vec2(5);
- ?創(chuàng)建包含5個(gè)?
"abc"
?的?vector<string>
:
?vector<string> vec3(5, "abc");
- 使用初始化列表創(chuàng)建?
vector<string>
:?
?vector<string> vec4 = {"abc", "def", "ghi"};
四、vector <string> 的輸入 \ 輸出
代碼范例:從cin讀入一組詞,并輸出這組詞的大寫(xiě),每個(gè)詞一行。
- 說(shuō)明:按圖所示的格式輸入數(shù)據(jù),并以Ctrl+Z結(jié)尾,回車(chē)出結(jié)果?
int main()
{
string str;
// 定義一個(gè)空的 word
vector<string> word;
// 開(kāi)始向 vector 動(dòng)態(tài)數(shù)組中 輸入字符串
while (getline(cin,str))
{
word.push_back(str); //push_back()用于添加元素到word的尾端
}
// 第一個(gè) for表示 vector 中 有幾個(gè)字符串
for (int i = 0; i < word.size(); i++)
{
// 第二個(gè)for表示 一個(gè)字符串中有幾個(gè)字符
for (int j = 0; j < word[i].length(); j++)
{
// 將每一個(gè)字符轉(zhuǎn)換為 大寫(xiě)字母
word[i][j] = toupper(word[i][j]);
}
}
// 輸出動(dòng)態(tài)數(shù)組 vector<string>
for (int i = 0; i < word.size(); i++)
{
cout << word[i] << endl;
}
return 0;
}
?五、vector <string> 中的注意事項(xiàng)
?在 vector<string> a 中 a[0].size() 和 a.size() 有什么區(qū)別?
?實(shí)例代碼:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string> a ={"aasd7777","bbasd","asdal","dasdas",
/*第四個(gè)元素:"a"*/
"adsajsadada","sda","dsa"};
int b = a[0].size();//計(jì)算第1個(gè)位置上總共多長(zhǎng) vector數(shù)組從0開(kāi)始存放第一個(gè)元素
int c = a.size();//計(jì)算vector中總共多長(zhǎng)
int d = a[6].size();//計(jì)算第7個(gè)位置
cout << a[3][2] << endl;//s
cout << a[4][4] << endl;//j
//超過(guò)第四個(gè)元數(shù)的長(zhǎng)度 報(bào)錯(cuò) subscript out of the range
cout << b<<endl;//8
cout << c << endl;//7
cout << d << endl;//3
return 0;
}
?結(jié)論:
1、a[0].size 計(jì)算存放在 vector 中第一個(gè)元素有多長(zhǎng)
2、a.size 計(jì)算存放了多少個(gè)元數(shù)在vector 中
3、可以將 vector<string> a 看作是二維數(shù)組
4、a[3][2]= s ?a[4][4]= j
a[行][列]?
行->a.size()
列->a[某行].size()
?六、常考面試題
?題目:最長(zhǎng)公共前綴
?鏈接:14. 最長(zhǎng)公共前綴
方法一:?
class Solution {
public:
string longestCommonPrefix(vector<string>& strs)
{
// 表示字符串索引
int j = 0;
string Countstr="";
// 進(jìn)入無(wú)限循環(huán)
while(1)
{
// 以第一個(gè)字符串的 j位置為基準(zhǔn)
char c = strs[0][j];
for(int i =0;i<strs.size();i++)
{
// 不與基準(zhǔn)相同或某一字符串結(jié)束
if(strs[i][j]!=c || j==strs[i].size())
{
return Countstr;
}
}
Countstr+=c;
j++;
}
return Countstr;
}
};
方法二:?
class Solution {
public:
string longestCommonPrefix(vector<string>& strs)
{
string result="";
if(strs.empty())
return result;
// 按照字典順序排序
sort(strs.begin(),strs.end());
string start = strs.front();
string en = strs.back();
int size = min(start.size(),en.size());
int len;
for(len = 0;len<size;len++)
{
if(start[len]!=en[len])
{
break;
}
}
string res;
res = start.substr(0,len);
return res;
}
};
七、共勉?
以下就是我對(duì)?vector <string>?的理解,如果有不懂和發(fā)現(xiàn)問(wèn)題的小伙伴,請(qǐng)?jiān)谠u(píng)論區(qū)說(shuō)出來(lái)哦
同時(shí)我還會(huì)繼續(xù)更新對(duì)C++? vector 二維數(shù)組 的理解,請(qǐng)持續(xù)關(guān)注我哦!!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-855224.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-855224.html
到了這里,關(guān)于【C++】 vector <string> 的超詳細(xì)解析?。?!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!