
【C++】 vector <string> 的超详细解析!!!
目录
一、前言
在【C++】中,vector 是一个动态数组,它可以根据需要自动调整自身的大小。同样 vector<string> 表示一个由 string 组成的 vector 。string 是一个字符序列,可以理解为文本字符串。但是在平时刷 leetcode 的时候,还是搞不清楚 vector<string>的用法 ,所以通过查阅资料,将其记录下来。
如果有老铁还不清楚 vector 的基本用法,可以看这篇文章:详解vector
二、 vector <string> 的个人理解和总结
标准库类型 vector 表示对象的集合,其内所有的对象类型都相同。使用 vector 必须包含头文件(#include <vector>)。
个人理解:vector 是一个类模板,编译器根据模板创建类或函数,vector<string> 就是根据模板创建了若干 string 对象,而 string 本身可以包含字符串,字符串可以视为若干个字符,即,vector<string> 可以视为一个a [ ][ ] 数组。可以使用输出数组的方式来输出vector<string> 对象内的内容。
三、vector <string> 的初始化
下面是如何创建
vector<string>
的一些例子:
- 创建一个空的
vector<string>
:
vector<string> vec1;
- 创建包含5个空字符串的
vector<string>
:
vector<string> vec2(5);
- 创建包含5个
"abc"
的vector<string>
:
vector<string> vec3(5, "abc");
- 使用初始化列表创建
vector<string>
:
vector<string> vec4 = {"abc", "def", "ghi"};
四、vector <string> 的输入 \ 输出
代码范例:从cin读入一组词,并输出这组词的大写,每个词一行。
- 说明:按图所示的格式输入数据,并以Ctrl+Z结尾,回车出结果
int main()
{
string str;
// 定义一个空的 word
vector<string> word;
// 开始向 vector 动态数组中 输入字符串
while (getline(cin,str))
{
word.push_back(str); //push_back()用于添加元素到word的尾端
}
// 第一个 for表示 vector 中 有几个字符串
for (int i = 0; i < word.size(); i++)
{
// 第二个for表示 一个字符串中有几个字符
for (int j = 0; j < word[i].length(); j++)
{
// 将每一个字符转换为 大写字母
word[i][j] = toupper(word[i][j]);
}
}
// 输出动态数组 vector<string>
for (int i = 0; i < word.size(); i++)
{
cout << word[i] << endl;
}
return 0;
}
五、vector <string> 中的注意事项
在 vector<string> a 中 a[0].size() 和 a.size() 有什么区别?
实例代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string> a ={"aasd7777","bbasd","asdal","dasdas",
/*第四个元素:"a"*/
"adsajsadada","sda","dsa"};
int b = a[0].size();//计算第1个位置上总共多长 vector数组从0开始存放第一个元素
int c = a.size();//计算vector中总共多长
int d = a[6].size();//计算第7个位置
cout << a[3][2] << endl;//s
cout << a[4][4] << endl;//j
//超过第四个元数的长度 报错 subscript out of the range
cout << b<<endl;//8
cout << c << endl;//7
cout << d << endl;//3
return 0;
}
结论:
1、a[0].size 计算存放在 vector 中第一个元素有多长
2、a.size 计算存放了多少个元数在vector 中
3、可以将 vector<string> a 看作是二维数组
4、a[3][2]= s a[4][4]= j
a[行][列]
行->a.size()
列->a[某行].size()
六、常考面试题
题目:最长公共前缀
链接:14. 最长公共前缀
方法一:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs)
{
// 表示字符串索引
int j = 0;
string Countstr="";
// 进入无限循环
while(1)
{
// 以第一个字符串的 j位置为基准
char c = strs[0][j];
for(int i =0;i<strs.size();i++)
{
// 不与基准相同或某一字符串结束
if(strs[i][j]!=c || j==strs[i].size())
{
return Countstr;
}
}
Countstr+=c;
j++;
}
return Countstr;
}
};
方法二:
class Solution {
public:
// 选出两个字符串的公共前缀
string findcomm(string& s1 , string& s2)
{
int i = 0;
// 确保 i 不能超过 最短字符串 并且 字符串前缀相等
while(i < min(s1.size(),s2.size()) && s1[i]==s2[i])
{
i++;
}
return s1.substr(0,i); // 注意左闭右开
}
string longestCommonPrefix(vector<string>& strs)
{
// 解法:两两比较
string ret = strs[0]; // 开始选出vector中的第一个字符串
for(int i = 1;i<strs.size();i++)
{
ret = findcomm(ret,strs[i]); // 更新公共前缀
}
return ret;
}
};
七、共勉
以下就是我对 vector <string> 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦
同时我还会继续更新对C++ vector 二维数组 的理解,请持续关注我哦!!
更多推荐
所有评论(0)