直接放代码吧,
懒得整理了改天再整理
好饿啊
#include<bits/stdc++.h>
#include<iostream>
#include<vector>//vector需要的头文件
#include<algorithm>
using namespace std;
int main() {
vector<int> v1;//定义一个空的一维数组
vector<int> v2= {1,2,4,5,6};
vector<int> v3(7,-1);
vector<int> v4(7);
vector<int> v5(v4);//复制v4
vector<int> v6(v4.begin(),v4.begin()+3);
int ch[20]= {0};
vector v7(ch,ch+7);//从数组里获得初值
//嵌套定义
//二维数组的创建
//可参考https://blog.csdn.net/weixin_44618297/article/details/120798312?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%B5%8C%E5%A5%97%E7%9A%84vector%E6%80%8E%E4%B9%88%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-120798312.142^v73^control,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187
//嵌套定义时 若预先知道大小 建议在创建时就定义好vector大小或直接使用数组 频繁扩容非常费时间
vector<vector<int>> td1(3,vector<int>(4,1));
vector<vector<int>> td2(4,vector<int>(5));//二维数组,3行4列并初始化为1
vector<vector<int>> td3(5);//5行
int line=3;//3行
/*
for(int i=0;i<td3.size();i++){
td3[i].reserve(line);
}
for(int i=0;i<td3.size();i++){
for(int j=0;j<td3[0].size();j++){
td3[i][j]=1;
}
}
for(int i=0;i<td3.size();i++){
for(int j=0;j<td3[0].size();j++){
printf("%d\n",td3[i][j]);
}
}
*/
//注意上面这段代码:这段代码中,使用了vector的reserve方法来为二维数组td3分配空间。但是,reserve方法只是增加了vector的容量,而不是改变了vector的大小。也就是说,reserve方法只是保证了vector可以容纳n个元素,但并没有实际创建这些元素。
//可以使用resize方法来改变vector的大小,并为新创建的元素赋予默认值或指定值,resize会同时增加vector的容量并改变vector的大小。resize方法会根据参数的值来调整vector的大小,如果参数的值大于当前的大小,那么vector会在末尾添加新的元素,并用默认值或指定值初始化;如果参数的值小于当前的大小,那么vector会删除多余的元素。
//示例如下:
for(int i=0;i<td3.size();i++){
td3[i].resize(line);
}
for(int i=0;i<td3.size();i++){
for(int j=0;j<td3[0].size();j++){
td3[i][j]=1;
}
}
for(int i=0;i<td3.size();i++){
for(int j=0;j<td3[0].size();j++){
printf("%d\n",td3[i][j]);
}
}
//
vector<string> stl1= {"hi","my","name","is"};
vector<string> stl2(4,"hi");
//
//vector相关操作
vector<int>a,b;
a.assign(b.begin(),b.begin()+7);//将b的0到6共七个元素赋值给a//注意第二个begin后面有括号
a.assign(4,2);
a.back();//返回a的最后一个元素
a.front();//返回a的第一个元素
a.clear();//清空数据(clear无法清除内存)
//清空向量a的内存vector<int > ().swap(a);
//参考https://blog.csdn.net/a272846945/article/details/51182144?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167879749216782427483039%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167879749216782427483039&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-51182144-null-null.142^v73^control,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=vector%20%20%20clear&spm=1018.2226.3001.4187
a.pop_back();//删除a向量的最后一个元素
a.push_back(5);//在a的最后插入5
a.insert(a.begin()+1,5);//在a的下标为1的元素位置插入5
a.insert(a.begin()+1,3,4);//在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
a.erase(a.begin()+1,a.begin()+7);//删除
a.size();
// int len1=td3.size();//建议提前进行强制类型转换为int,不然可能会有警告[警告] comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long long unsigned int'} [-Wsign-compare]
a.capacity();//返回a在内存中总共可以容纳的元素个数
a.resize(10);//将a的现有元素个数调整至10个,多则删,少则补,其值随机
a.resize(10,2);//将a的现有元素个数调整至10个,多则删,少则补,其值为2
a.reserve(100);//将a的容量扩充至100,
a.swap(b);//b为向量,将a中的元素和b中的元素整体交换
if(a==b);
if(a.empty());//判空//返回true或false
for(int i=1; i<=10; i++) {
int t;
cin>>t;
a.push_back(t);
}
//常用
sort(a.begin(),a.end());//快排
reverse(a.begin(),a.end());//逆序 //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
//vector的遍历
/*
//1
for(int i;i<a.size();i++){
cout<<a[i]<<" ";
}
cout<<endl;
//2
for(auto i=a.begin();i!=a.end();i++){
cout<<*i<<" ";
}
cout<<endl;
//3
for(auto i:a){
cout<<i<<" ";
}
cout<<endl;
*/
//vector做形参
/*
在C++中vector容器作为形参的三种方式如下:
function(vector a)
function(vector& a)
function(vector* a)
假设vector< int > t, 此三种调用方式及对应的意义如下:
function(t) 传入值
function(t) 传入引用
function(t) 传入地址
产生的效果:
会产生复制构造,不会改变传入的t,但是浪费内存;
不会产生复制构造,改变t,节省内存;
不会产生复制构造,改变t,节省内存。
————————————————*/
return 0;
}