添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

结构体的赋值我们还是较为熟练的,直接使用’变量名.属性名’就可以为这个属性赋值了,但是结构体的初始化,还真可能有一些问题。

初始化方式1:不带构造函数

我们可以通过下面的方式来声明一个A类型的变量a.但是这里的a里面的值是脏的。我们必须赋值后再使用

struct A{
	int num;
A a ;   
初始化方式2:使用构造函数

c++的结构体中,我们可以使用构造函数来进行初始化结构体.下面是可行的

struct A{
	int num;
	A(int n){
		num=n;
A a(2); //声明了一个A结构体类型的变量a 且a.num=2.
A b;    //报错

为什么我们声明 A b; 会报错?
当我们未定义构造函数的时候,系统会自动为我们提供一个无参的构造函数,但是如果我们显式的定义了一个带参的构造函数.系统也就不会为默认提供无参的构造函数了,上述代码就是这样。除非我们自己再定义一个无参的构造函数:

struct A{
    int num;
    A(int n){
        num=n;
int main(){
    A a[100];
    return 0;

这样也是不会报错的。

vector的一些操作

在写算法的时候,vector所适用的情况还是挺多的.目前学到图里就有用,预计之后学到回溯,dp都可能会用到。所以还是记录一下学习一下哈

vector是啥?

向量(Vector)是一个封装了动态大小数组的顺序容器
是一个容器,就可以装int,float,自己定义的结构体,也可以嵌套(vector套vector).

vector的一些操作

#include <stdio.h>
#include <vector>
using namespace std;
声明一个vector

以int类型举例:

vector<int> v;
//我们可以利用vector动态声明一个数组.
vector<int> v(n); //声明了一个长度为n的数组.且之后可以再加。
添加一个元素

尾部添加:

v.push_back(2);
删除一个元素

尾部删除:

v.pop_back();  //没有返回值.删除了最后一个元素。

清空vector:

v.clear();  //清空vector中所有元素
获取vector元素

查看vector是否为空

bool isEmpty=v.empty();

查看vector元素数目

int size=v.size();

定位pos位置的元素

int num=v.at(pos);

获取首个元素

int num=v.front();

获取末尾元素

int num=v.back();
vector的排序

对于基本数据类型,vector是可以直接使用< algorithm >头文件中的sort函数进行排序的。

sort(v.begin(),v.end()); //默认从小到大排序,从大到小可以重写compare函数。
bool cmp(int a, int b){
	return a<b;
sort(v.begin(),v.end(),cmp); //这个时候就是从大到小排序了。
vector的访问

1、直接访问

vector<int> v;
for(int i=0;i<10;i++)
        v.push_back(i);
    for(int i=0;i<10;i++)//方法一
        printf("%d ",v[i]);

2、使用迭代器访问

//方法二,使用迭代器将容器中数据输出
    vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
    for(it=v.begin();it!=v.end();it++)
        printf("%d ",*it);
#include <stdio.h>
#include <vector>
using namespace std;
vector<int> v;
int main(){
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(5);
    v.push_back(4);
    v.push_back(7);
    int a=v.at(5);
    int b=v.at(4);
    printf("size:%d\n",v.size());
    v.pop_back();
    int c =v.at(4);
    printf("%d %d %d\n",a,b,c);
    printf("size:%d\n",v.size());
    for(int i=0;i<10;i++)
        v.push_back(i);
    for(int i=0;i<10;i++)//方法一
        printf("%d ",v[i]);
    printf("\n");
    //方法二,使用迭代器将容器中数据输出
    vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
    for(it=v.begin();it!=v.end();it++)
        printf("%d ",*it);
                    vector操作以及结构体的初始化结构体的初始化初始化方式1:不带构造函数初始化方式2:使用构造函数vector的一些操作vector是啥?vector的一些操作提前准备声明一个vector添加一个元素删除一个元素获取vector元素vector的排序vector的访问整个代码结构体的初始化结构体的赋值我们还是较为熟练的,直接使用’变量名.属性名’就可以为这个属性赋值了,但是结构体的初始化,还真可能有一些问题。初始化方式1:不带构造函数我们可以通过下面的方式来声明一个A类型的变量a.但是这里的a里面
				
结构体实例(包括共用体)和类实例的初始化方法完全相同,二者都可以应用于继承层次中。不同点是结构体(包括共用体)默认成员为public,而类默认成员是private型的。   一、若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。   ①        不论值的个数多少,都必须使用花括号定界   ②        未指定值的数据成员编译器会自动初始化为默认值   ③        这种初始化对象方式,要求所有数据成员必须为public型   ④        这种初始化对象方式,要求类中不能编写任何构造函数 struct S {  //cla
1.vector<int> list1; 默认初始化,最常用 此时,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。 这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。 2.vector<int> list2(list); 或者 vector<int> ilist2 = ilist; //拷贝初始化 ,"=" 两种方式等价 , list2 初始化为list 的拷贝, list必须与li.
//初始化size,但每个元素值为默认值 vector&lt;int&gt; abc(10); //初始化了10个默认值为0的元素 //初始化size,并且设置初始值 vector&lt;int&gt; cde(10,1); //初始化了10个值为1的元素 通过数组地址初始化
STL | vector初始化和使用 vector指向量,可以理解为“变长数组”,长度根据需要而自动改变的数组。有时会碰到普通数组会超过内存的情况,可以使用vector解决。而且,vector可以用来以邻接表的方式存储图,可以解决当节点数太多,无法使用邻接矩阵,又害怕使用指针实现邻接表的时候,使用很简单。 01 vector初始化 1⃣️ 默认初始化 vector<int> il...
关于vector vector数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组,在数据结构中就相当于顺序储存的线性表,寻找元素非常快,但是插入元素的时间却很大(list是一个双向链表,在同一个位置插入大量的数据时速度很快,但是查找的速度就会慢很多) 和普通数组一样可以通过下标索引来进行访问 与其它动态序列容器相比(deques, lists and forward_lists)...
1. 基础使用与简介 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组 vector是我们代替数组时常用的结构,其好处 一为动态长度 二为可以保证连接关系的删改, 三是动态感知内存分配器 我们可以简单地认为它是一个动态长度的stack,满足先进后出的原则(FILO).
可以使用以下方式初始化一个存储结构体vector容器: 1. 使用默认构造函数初始化空的vector容器,然后使用push_back()函数添加结构体数据。 ```c++ struct Person { string name; int age; vector<Person> people; people.push_back({"Alice", 25}); people.push_back({"Bob", 30}); 2. 在声明vector容器时,使用初始化列表初始化结构体数据。 ```c++ vector<Person> people = {{"Alice", 25}, {"Bob", 30}}; 3. 使用emplace_back()函数添加结构体数据,该函数可以直接在vector容器中构造对象,无需提前定义对象。 ```c++ vector<Person> people; people.emplace_back("Alice", 25); people.emplace_back("Bob", 30);