c++学习-数组
int a[10]; //是个元素,在windows下回报错,linux会输出一个随机数
int a[10]={1,2}; //初始化,其他的为0
数组越界:
为了调高效率, 编译器不会对数组越界做检查
#include <iostream>
using namespace std; int main()
{ int b[];
int a[];
b[] = ; cout<<b[]<<endl;
cout<<a[]<<endl; return ;
}
int a[10]; // 自动生成一个指针,该指针指向数组的第一个元素的地址 int *a=&a[0];
数组的传递:
void test(int []);//简要数组声明
void test(int [10]);//标准数组声明
void test(int *a);//指针声明
数组对象:
#include<iostream>
using namespace std; class area{
public:
area(){}
area(int w, int h){ this->w = w; this->h = h; cout << "gouzao" << endl; }
~area(){ cout << "xigou" << endl; }
int get()
{
return w*h;
}
private:
int w;
int h;
}; int main()
{
area a[] = {area(,),area(,)}; cout << a[].get() << endl; return ; }
指针数组:
#include<iostream>
using namespace std; class area{
public:
area(){ cout << "gouzao:" <<endl; }
area(int i){ this->i = i; cout << "gouzao:" << i << endl; }
area(int w, int h){ this->w = w; this->h = h; cout << "gouzao" << endl; }
~area(){ cout << "xigou "<<i << endl; }
int get()
{
return w*h;
}
private:
int w;
int h;
int i;
}; int main()
{
area *p[];//指针数组
int i;
for (i = ; i < ; ++i)
{
p[i] = new area(i);
} //释放内存
for (i = ; i < ; ++i)
{
delete p[i];
} return ; }
优化后:
#include<iostream>
using namespace std; class area{
public:
area(){ cout << "gouzao:" <<endl; }
area(int i){ this->i = i; cout << "gouzao:" << i << endl; }
area(int w, int h){ this->w = w; this->h = h; cout << "gouzao" << endl; }
~area(){ cout << "xigou "<<i << endl; }
int get()
{
return w*h;
}
void set(int w, int h)
{
this->w = w;
this->h = h;
}
private:
int w;
int h;
int i;
}; int main()
{ area *p = new area[]; //在堆中创建连续的五个对象,并将第一个对象的地址赋值给指针 p
int i; for (i = ; i < ; i++)
{
p[i].set(i,i);
} delete []p; //特有的删除方式 return ; }
枚举常量和数组:
int main()
{ enum day{mon, tue, wen, thur ,fri,sat, sun};
double tempature[sun + ] = { , , , , , , }; int i;
for (i = ; i <= sun; i++)
{
cout << "xingqi " << i << "\t" << "qiwen:" << tempature[i] << endl;
} }
有 \0 直接输出数组名即可
int main()
{ char c[] = {'a','b', '\0'}; //cout << sizeof(c) << endl;
cout << c << endl; return ; }
int main()
{ char c[]; //cin >> c; //不检查是否越界,遇到空格会结束
//gets(c); //不检查是否越界,会接收所有的字符
cin.get(c,);//解决上面问题 cout << sizeof(c) << endl;
//cout << (int)c[2] << endl;
//cout << (int)c[0] << endl; return ; }
strcat
int main()
{ char a[] = "ab";//注意第一个要足够的大
char b[] = "cd"; strcat(a, b); //连接时第一个字符串末尾的 '\0' 会自动去掉 cout << a << endl;
cout << sizeof(a) << endl; return ; }
strcpy
int main()
{ char a[] = "ab";
char b[] = "cd"; strcpy(a,b); //b可以是一个字符串,注意a要足够大
//strcpy(a, "def"); cout << a << endl;
cout << sizeof(a) << endl; return ; }
strcmp
int main()
{ char a[] = "ab";
char b[] = "ab"; if (strcmp(a, b) == ) // strcmp("a", "b")
{
cout << "equal"<<endl;
} return ; }
重载[]运算符解决数组越界问题:
class A{
public:
A(int len){ this->len = len; p = new char[len]; }
~A(){ delete[]p; p = ; }
char & operator[](int i)
{
if (i< || i>=len)
{
cout << "越界" << endl;
return *(p + len - );
}
else{
return *(p + i);
}
}
private:
int len;
char *p; }; int main()
{
A a(); int i;
char *p = "abcdefghkjklmn";
for (i = ; i < ; ++i)
{
a[i] = *(p + i);
} for (int j = ; j < ; j++)
{
cout << a[j] << endl;
} return ; }
c++学习-数组的更多相关文章
- php学习-数组(一)
数组函数可以对大量性质相同的数据进行存储,排序,插入及删除等操作. 学习任务: 声明数组,输出数组,遍历数组,查询数组中指定元素,获取数组中的最后一个元素. 删除数组中重复的元素.统计数组中元素的个数 ...
- Shell脚本学习-数组
跟着RUNOOB网站的教程学习的笔记 Shell数组 数组中可以存放多个值,Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似). 与大部分编程语言类似,数 ...
- 09-java学习-数组-冒泡排序-选择排序-数组工具类编写-查找-扩容
数组的排序算法 查找算法 数组协助类Arrays的学习和使用 数组的扩容
- Knockout.Js官网学习(数组observable)
前言 如果你要探测和响应一个对象的变化,你应该用observables. 如果你需要探测和响应一个集合对象的变化,你应该用observableArray . 在很多场景下,它都非常有用,比如你要在UI ...
- Scala学习——数组/映射/元组
[<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...
- Java学习-数组
1.数组的是Object的直接子类,它属于“第一类对象”,但是它又与普通的java对象存在很大的不同,类名为:[I 一维数组:[I 二维数组:[[I 三维数组:[[[I 2.[代表了数组的维度,一个[ ...
- java学习——数组
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; array 为引用数据类型|-数组数据类型 | 内存结构:程序在运行时,需要在内存中的分配空间.为了提高运行的效率,有对空间进行不同 ...
- Java小知识点学习--------数组和位运算小知识点
位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2; 此时两个数组变量都会同一时 ...
- Scala学习---数组
1.编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 /** * Created by vito on 2017/1/11. */ object ex1 { ...
随机推荐
- opencv矩阵总结
OpenCV 矩阵操作 CvMat 转自:http://hi.baidu.com/xiaoduo170/blog/item/10fe5e3f0fd252e455e72380.html 每回用矩阵都要查 ...
- js的数组操作 splice
原文:点击打开链接 1.作用:从指定位置删除部分元素并增加新的元素 1.1.该方法返回值是被删除的元素组成的数组 1.2.splice是直接 ...
- PHP使用libevent实现高性能httpServer
今天发现php也有一个libevent的扩展,安装后尝试下了一个webserver(httpserver), 发现性能还不错,逻辑很简单,每秒响应速度1800~4000次/s 代码如下 <?ph ...
- paas-openshift
https://www.openshift.com/pricing/index.htmlOpenShift是红帽的云开发平台即服务(PaaS).自由和开放源码的云计算平台使开发人员能够创建.测试和运行 ...
- Android SingleTask与SingleInstance的区别
Android SingleTask与SingleInstance的区别 原文地址 现有2个项目,taskA.taskB.taskA负责调用taskB中指定的界面. taskB中有3个界面,a.b.c ...
- C#使用RSA证书文件加密和解密示例
修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题. Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定 ...
- 【jmeter】目录介绍
JMeter也学了一阵子了,对于基本的操作已了解,再回过头来看看Jmeter的目录,本篇是对于它的目录进行一些简单的介绍. JMeter解压之后打开,根目录如下图: 1.bin:可执行文件目录 2.d ...
- 【jmter】逻辑控制器(Logic Controller)
1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”.意思是说, ...
- MATLAB绘 透视图
MATLAB绘图随记(1)--如何画一个透明平面 http://blog.sina.com.cn/s/blog_5cd4cccf0100q90p.html 小老板让我绘个图 找了些资料 最后发现mat ...
- 剑指offer系列19--栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...