求c++中vector用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c++中vector用法相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <vector>
using namespace std;
struct A
int a;
int b;
;
struct B
int x;
vector<A> y;
;
int main(int argc, char* argv[])
B b;
b.x=5;
b.y[0].a=1;
b.y[0].b=2;
cout<<b.x<<endl;
cout<<b.y[0].a<<endl;
cout<<b.y[0].b<<endl;
cin.get();
return 0;
请问这段小程序为什么总提示溢出呢?
一种是与C语言中的数组使用方式相同,支持随机访问,数组大小动态变化。也就是使用data[i]的方式,这种方式与C语言中使用相同,但是存在没有边界检查的缺点(微软的编译器中有边界检查,gcc中没有),所有建议使用迭代器的方式iterator进行使用。
另一种是支持队堆栈是操作,也就是使用push_back、push_front等。如果想要详细了解,可以查看源码。
以上全手打,希望采纳。 参考技术A b里的vector没有元素.不存在b.y[0].你可以创建一个结构体A,将1,2赋给A,再用B.y.push_back()插入.这时候才可以用这两条语句:b.y[0].a=1; b.y[0].b=2;本回答被提问者采纳 参考技术B b.y[0].a=1;
b.y[0].b=2;
问题在这,因为你这里的vector<A> y; 只是声明了而已并不能直接使用的,你要给他添加元素,应该要这样:
struct A a1;
a1.a=1;a1.b=2;
b.y.push_back(a1);//此处在b.y的末尾添加一个元素a1
后面的就没什么问题了 参考技术C #include <iostream>
#include <vector>
using namespace std;
struct A
int a;
int b;
;
struct B
int x;
vector<A> y;
;
int main(int argc, char* argv[])
B b;
b.y.resize(1); //原来是个空的 至少要给他分配 y[0]的位置
b.x=5;
b.y[0].a=1;
b.y[0].b=2;
cout<<b.x<<endl;
cout<<b.y[0].a<<endl;
cout<<b.y[0].b<<endl;
cin.get();
return 0;
参考技术D 不能对空的vector对象进行赋值,记得应该用push_back();
c++中vector用法
#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); 是什么意思??
这两句在测试成功后面
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++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
参考技术Ac++中,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[]操作符,或者用迭代器来引用元素对象。
参考技术B resize操作是改变容器所包含的元素个数。snakeMap.resize(line) 是开辟出line个vector(char)类型的元素空间,snakeMap[i].resize(row) 是对每一个line开辟出row个char类型的元素空间。本回答被提问者采纳 参考技术C 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; 参考技术D 你可以创建一个结构体A,将1,2赋给A,再用B.y.push_back()插入.这时候才可以用这两条语句:b.y[0].a=1; b.y[0].b=2;
以上是关于求c++中vector用法的主要内容,如果未能解决你的问题,请参考以下文章