c++中vector用法

#include<windows.h>#include<ctime>#include<iostream>#include<vector>#include<queue>us... #include <windows.h>
#include <ctime>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#ifndef SNAKE_H
#define SNAKE_H
class Cmp
{
friend class Csnake;
int rSign; //横坐标
int lSign; //竖坐标
public:
friend bool isDead(const Cmp& cmp);
Cmp(int r,int l){setPoint(r,l);}
Cmp(){}
void setPoint(int r,int l){rSign=r;lSign=l;}

Cmp operator-(const Cmp &m) const
{
return Cmp(rSign-m.rSign,lSign-m.lSign);
}

Cmp operator+(const Cmp &m)const
{
return Cmp(rSign+m.rSign,lSign+m.lSign);
}
};

const int maxSize = 5; //初始蛇身长度
class Csnake
{
Cmp firstSign; //蛇头坐标
Cmp secondSign;//蛇颈坐标
Cmp lastSign; //蛇尾坐标
Cmp nextSign; //预备蛇头
int row; //列数
int line; //行数
int count; //蛇身长度
vector<vector<char> > snakeMap;//整个游戏界面
queue<Cmp> snakeBody; //蛇身
public:
int GetDirections()const;
char getSymbol(const Cmp& c)const
//获取指定坐标点上的字符
{
return snakeMap[c.lSign][c.rSign];
}
Csnake(int n)
//初始化游戏界面大小
{
if(n<20)line=20+2;
else if(n>30)line=30+2;
else line=22;
row=line*3+2;
}
bool isDead(const Cmp& cmp)
{
return ( getSymbol(cmp)=='@' || cmp.rSign == row-1
|| cmp.rSign== 0 || cmp.lSign == line-1 ||
cmp.lSign == 0 );
}
void InitInstance(); //初始化游戏界面
bool UpdataGame(); //更新游戏界面
void ShowGame(); //显示游戏界面
};
#endif // SNAKE_H

//using namespace std;

//测试成功
void Csnake::InitInstance()
{
snakeMap.resize(line); // snakeMap[竖坐标][横坐标]
for(int i=0;i<line;i++)
{
snakeMap[i].resize(row);

for(int j=0;j<row;j++)
{
snakeMap[i][j]=' ';
}
}
for(int m=1;m<maxSize+1;m++)
{
//初始蛇身
snakeMap[line/2][m]='@';
//将蛇身坐标压入队列
snakeBody.push(Cmp(m,(line/2)));
//snakeBody[横坐标][竖坐标]
}
//链表头尾
firstSign=snakeBody.back();
secondSign.setPoint(maxSize-1,line/2);
}

//测试成功
int Csnake::GetDirections()const
{
if(GetKeyState(VK_UP)<0) return 1; //1表示按下上键
if(GetKeyState(VK_DOWN)<0) return 2; //2表示按下下键
if(GetKeyState(VK_LEFT)<0) return 3; //3表示按下左键
if(GetKeyState(VK_RIGHT)<0)return 4; //4表示按下右键
return 0;
} 下面两句看不懂!
snakeMap.resize(line);和snakeMap[i].resize(row); 是什么意思??
这两句在测试成功后面
展开
 我来答
哆啦聊教育
高粉答主

2021-10-19 · 说的都是干货,快来关注
知道小有建树答主
回答量:4803
采纳率:100%
帮助的人:78.8万
展开全部

c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:

工具/材料:电脑、c++编译器

1、首先构造一个int类型的空vector向量。

2、可以看到vector的size为0。

3、接着构造了6个元素值为20的vector向量。

4、成功的构造了6个元素为20的向量。

5、同样也将对象复制给另一个vector对象。

6、以下就是程序运行结果了。

相关信息

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

清风聊生活
高粉答主

2021-09-29 · 醉心答题,欢迎关注
知道小有建树答主
回答量:3066
采纳率:100%
帮助的人:49.9万
展开全部

c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:

工具/材料:电脑、c++编译器

1、首先,打开c++编译器,构造一个int类型的空vector向量。

2、程序运行结果如图,可以看到vector的size为0。

3、如红框勾选所示,构造了6个元素值为20的vector向量。

4、运行结果显示,成功的构造了6个元素为20的向量。

5、以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。

6、以下,就是程序运行结果了。


注:vector容器内存放的所有对象都是经过初始化的。如果没有指定存储对象的初始值,那么对于内置类型将用0初始化,对于类类型将调用其默认构造函数进行初始化(如果有其它构造函数而没有默认构造函数,那么此时必须提供元素初始值才能放入容器中)。

resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anyway316
2011-03-31
知道答主
回答量:20
采纳率:0%
帮助的人:10.3万
展开全部
resize操作是改变容器所包含的元素个数。snakeMap.resize(line) 是开辟出line个vector(char)类型的元素空间,snakeMap[i].resize(row) 是对每一个line开辟出row个char类型的元素空间。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闷声发大才
2011-03-31 · TA获得超过160个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:49.7万
展开全部
resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。
给你个例子可以看一下:
std::vector<int> vec;
vec.resize(100);
std::cout << vec.capacity() << std::endl;
vec.push_back(1);
std::cout << vec.capacity() << std::endl;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风哥老关
2011-04-01 · TA获得超过572个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:180万
展开全部
你可以创建一个结构体A,将1,2赋给A,再用B.y.push_back()插入.这时候才可以用这两条语句:b.y[0].a=1; b.y[0].b=2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式