string和vector这两个容器很像
初始化
#include <iostream>
#include <string>
using namespace std;
unordered_map<int,string> pos;
int main()
{
string ans=string(5,'a');
cout<<ans;
return 0;
}
//运行结果
aaaaa
注意ans在定义是赋了初值,即“aaaaa”。
而vecotr也可以如此赋值
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v(5,0);
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
return 0;
}
//运行结果
0 0 0 0 0
也可以使用其余的vector在定义vector时赋初值
例如
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v(5,0);
vector<int> v1(v);
for(int i=0;i<v1.size();i++)
printf("%d ",v1[i]);
return 0;
}
//运行结果
0 0 0 0 0
先定义了一个vector向量v,并且初始化为有5个0的向量。
又定义了一个vector向量v1,并用v进行了初始化。
v1和v中的内容一样。
注意一个细节
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v(5);
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
return 0;
}
//运行结果
0 0 0 0 0
这里定义了一个vector向量v,与上面不同的是,初始化时,只规定了有5个元素,并未说是多少。但是,默认为5个0,这是个比较隐蔽的问题,小心。
使用数组初始化
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a[]={
1,2,3,4,5,6,7,8};
vector<int> v(a,a+4);
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
return 0;
}
//运行结果
1 2 3 4
定义了一个数组a,在定义vector向量v时使用了数组中的元素进行了初始化。只用其中的4个元素。
当然了也可以使用vector向量来如此初始化
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> temp;
for(int i=0;i<10;i++)
temp.push_back(i);
vector<int> v(temp.begin(),temp.begin()+4);
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
return 0;
}
//运行结果
0 1 2 3
上面代码,先定义了一个vector向量temp,并依次向里面插入0-9,之后,用它的前四个元素在定义v时初始化。
下面的赋值也是可以的。
#include <iostream>
#include <vector>
using namespace std;
void show(vector<int> &ans){
for(int i=0;i<ans.size();i++)
printf("%d ",ans[i]);
}
int main()
{
vector<int> temp={
1,2,3,4,5,6,7,8,9,10};
vector<int> ans(temp);
vector<int> t=vector<int>(ans.begin()+3,ans.end());//多了vector<int>
show(t);
return 0;
}
与vector向量的一部分相比,临时vector
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> temp={
1,2,3,4,5,6,7,8,9,10};
vector<int> ans(temp);
vector<int> t=vector<int>(ans.begin()+3,ans.end());
if(t == vector<int>(ans.begin()+3,ans.end()))//注意这种临时比较两个vector的写法
printf("yes");
return 0;
}