seo网站推广佛山,企业网站为什么都选千博企业网站,口碑好的常州做网站,长安网站制作常用STL #x1f388;1.动态数组#x1f388;2.vector的基础使用#x1f52d;2.1引入库#x1f52d;2.2构造一个动态数组#x1f52d;2.3插入元素#x1f52d;2.4获取长度并且访问元素#x1f52d;2.5修改元素#x1f52d;2.6删除元素#x1f52d;2.7清空 #x1f38… 常用STL 1.动态数组2.vector的基础使用2.1引入库2.2构造一个动态数组2.3插入元素2.4获取长度并且访问元素2.5修改元素2.6删除元素2.7清空 3.vector的基础应用3.1例题一 4.用动态数组存储自定义数据4.1二维的动态数组 1.动态数组
有些时候想开一个数组但是却不知道要开多大长度的数组合适因此我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组也就是不定长数组数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难但是C里面有已经写好的标准模板库Standard Template Library也就是我们常说的STL库实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便的调用标准库来减少我们的代码量。C中动态数组写作vector。
2.vector的基础使用
2.1引入库
引入库C中vector的实现是在一个vector头文件中在代码的开头引入这个头文件并在引入所有头文件之后加上一句using namespace std;
#include vector
using namespace std;
int main()
{return 0;
}2.2构造一个动态数组
构造一个动态数组C中直接构造出一个vector的语句为vectorTvec.这样我们定义了一个名为vec的储存T类型数据的动态数组。其中T是我们数组要储存的数据类型可以是int、float、double、或其他自定义的数据类型等等。初始的时候vec是空的。比如vectorinta定义了一个储存整数的动态数组a.
2.3插入元素
C中通过push_back()方法在数组最后面插入一个新的元素。
#include vector
using namespace std;
int main()
{vectorint vec;//[]vec.push_back(1);//[1]vec.push_back(2);//[1,2]vec.push_back(3);//[1,2,3]return 0;
}
2.4获取长度并且访问元素
C中通过size()方法获取vector的长度通过[]操作直接访问vector中的元素这一点和数组是一样的。
#include iostream
#include vector
using namespace std;
int main()
{vectorint vec;//[]vec.push_back(1);//[1]vec.push_back(2);//[1,2]vec.push_back(3);//[1,2,3]for (int i 0; i vec.size(); i){cout vec[i] endl;}return 0;
}2.5修改元素
C中修改vector中的某个元素很简单只需要用给它赋值就好了。
#include iostream
#include vector
using namespace std;
int main()
{vectorint vec;//[]vec.push_back(1);//[1]vec.push_back(2);//[1,2]vec.push_back(3);//[1,2,3]vec[1] 3;//[1,3,3]vec[2] 2;//[1,3,2]for (int i 0; i vec.size(); i){cout vec[i] endl;}return 0;
}2.6删除元素
和插入一样删除元素也只能在动态数组的末端进行操作。C中通过pop_back()方法删除动态数组的最后一个元素。
#include iostream
#include vector
using namespace std;
int main()
{vectorint vec;//[]vec.push_back(1);//[1]vec.push_back(2);//[1,2]vec.push_back(3);//[1,2,3]vec.pop_back();//[1,2]vec.pop_back();//[1]return 0;
}2.7清空
C中只需要调用clear()方法就可以清空vector。 C中vector的clear()只是清空vector并不会清空开的内存。用一种方法可以清空vector的内存vectorint().swap(v);
3.vector的基础应用
3.1例题一
题目将1-10的平方依次存储到刚才定义的vector里面。这里我们需要借助一个循环来完成循环枚举1到10并且将这些值输出。
算法
#include iostream
#include vector
using namespace std;
int main()
{vectorint v;for (int i 1; i 10; i){v.push_back(i * i);}for (int i 0; i v.size(); i){cout v[i] ;}cout endl;return 0;
}4.用动态数组存储自定义数据
✅动态数组不仅仅可以储存基本的数据类型还能储存自定义数据类型比如结构体。
#include iostream
#include vector
using namespace std;
struct Student
{string name;int age;
};
int main()
{vectorStudent class1;Student stu1, stu2;stu1.name ZHANGSAN;stu1.age 18; stu2.name LISI;stu2.age 19;class1.push_back(stu1);class1.push_back(stu2);return 0;
}通过上面的学习我们知道可以通过push_back()来向动态数组添加一个元素。如果我们需要一个长度为n的全是1的动态数组。我们可以像下面这样写
int n 10;
vectorint vec;
for (int i 0; i n; i)
{vec.push_back(1);
}✅其实我们可以通过一个构造函数快速构建这样的一个动态数组。所谓构造函数就是在我们定义一个对象的时候可以赋予初始值。
int n 10;
vectorint vec(n,1);上面的代码我们定义了一个vector的时候调用构造函数第一个参数表示初识的动态数组的长度第二个参数表示初识数组里面每个元素的值。如果不传入第二个参数那么初始值都是0。 注上面用的构造函数的写法和用循环是等价的通过合理的使用构造函数可以减少代码量。
4.1二维的动态数组
✅我们都知道数组可以开二维的那么动态数组能用二维的吗答案是肯定的动态数组也支持二维的。vectorvectorint vec2,这样就定义了一个二维的动态数组。注意int 中间有一个空格这个空格一定要加上否则在一些老版的编译器上将不能通过编译。 通过上面的方法定义的二维数组每一维都是空的我们必须要一维一维的赋值。比如我们规定第一维的大小是n。
#include iostream
#include vector
using namespace std;
int main()
{int n 5;vectorvectorint vec2;for (int i 0; i n; i){vectorint x(i 1, 1);vec2.push_back(x);}for (int i 0; i n; i){for (int j 0; j vec2[i].size(); j){cout vec2[i][j] ;}cout endl;}cout endl;return 0;
}✅二维动态数组的每一维的长度都可以不一样可以是任意形状的借助构造函我们可以快速构造一个n行m列的动态数组每个元素的初始值是0vectorvectorint vec2(n,vectorint(m,0))。 这里我们尝试定义一个二维的储存整数的动态数组v2d接下来我们给第一维赋值第一维的大小为5每个元素是一个一维的vector。我们这里通过vectorint()快速构造一个一维的vector。试写出111~5525的乘法表。
#include iostream
#include vector
using namespace std;
int main()
{vectorvectorint v2d;for (int i 0; i 5; i){v2d.push_back(vectorint());}for (int i 0; i v2d.size(); i){for (int j 0; j i; j){v2d[i].push_back((i 1) * (j 1));}}for (int i 0; i v2d.size(); i){for (int j 0; j v2d[i].size(); j){cout i 1 * j 1 v2d[i][j] \t;}cout endl;}return 0;
}