IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 《Essential C++》学习DAY1|数组向量与指针 -> 正文阅读

[C++知识库]《Essential C++》学习DAY1|数组向量与指针

因为小姚在学习数据结构和算法的时候发现,她的C++基础十分薄弱,于是这一系列笔记为自学《Essential C++》划重点系列,希望能对C++的初学者有所帮助!

一、C++编程基础

1.用来处理“多值初始化”的构造函数初始化语法

#include<complex>
complex<double> purei(0,7);
//<>表示complex是一个template class(模板类),template class允许
//我们在“不必指明data members型别”的情况下定义class

2.条件运算符

a?b:c表示若a=True,则执行b;若a=False,则执行c

3.++在前和在后的区别

cout<<++a;
//上式中的a在被打印之前就已经进行了递增运算,所以打印出来的是a+1
cout<<a++;
//上式中的a在被打印出来之后才进行递增运算,所以打印出来的是a

4.如何运用数组和向量

4.0 背景

背景:程序要显示不同的元素值,而这些元素值要出自不同的数列

解决之道:使用可存放连续整数值的容器(container)型别,这种型别不仅允许我们以名称(name)来取用容器中的元素,也允许我们以容器中的位置来取用元素。C++允许我们以array型别或者标准程序库提供的vector类来定义容器。下面我们分别来介绍array和vector。

4.1 应用

?4.1.1 定义

//array的定义
//array的尺度必须是个常量表达式,也就是一个不需要在执行期计算其值的表达式
const int seq_size = 18;
int pell_seq[seq_size];
//vector object的定义,首先必须含入vector头文件,vector<元素型别>名字(尺度)
# include <vector>
vector<int> pell_seq(seq_size);

如何将适当的值填入container中呢?对于array,我们可以指定初始化序列(initialization list)

int elem_seq[seq_size] = {
    1,2,3
};

?其实可以让让编译器根据初值的数量,自行计算出array的容量

int elem_seq[] = {
    1,2,3,4,5,6
};

vector不支持上述这种初始化序列,有个冗长的写法可以为每个元素指定特定值

vector<int> elem_seq(seq_size);
elem_seq[0]=1;
elem_seq[1]=2;
elem_seq[2]=3;
elem_seq[3]=4;

另一个做法是利用一个已经初始化好的array作为vector的初值

int elem_vals[seq_size] = {
    1,2,3,4,5,6,7
};
//用elem_vals的值来初始化elem_seq
vector<int>elem_seq(elem_vals,elem_vals+seq_size)
//传入的这两个值都是实际内存位置,表示“用以将vector初始化的元素范围”

4.1.2 位置元素与读取

//索引操作通过下标运算符完成,容器的第一个元素位置为0而不是1
pell_seq[0]=1;//指定第一个元素值为1
pell_seq[1]=2;//指定第二个元素值为2
//要依次迭代vector或array中的多个元素
for(int ix=2; ix<seq_size; ++ix)
    pell_seq[ix] = pell_seq[ix-2] + 2*pell_seq[ix-1];
elem_seq.size() //会返回elem_seq这个vector所包含的元素个数
for(int ix = 0;ix < elem_seq.size(); ++ix)
    cout<<pell_seq[ix];

?发现,被定义的位置元素的变量是可以进行运算的

5.指针带来弹性

?例1:

//将pi的初值设为ival所在的内存地址
int *pi = &ival//只是定义的时候这样写,但实际上是pi=&ival哦
//其中pi是个int型别的对象的指针
//指针指向的是地址,&是取址运算符
//指针既可以让我们操控指针内含的内存地址,也可以让我们操控指针所指的对象值
pi;//核定pi所含有的内存地址,此举形同操纵指针对象本身
*pi;//核定ival的值,等于是操控pi所指的对象

例2

对于我们的6个vector对象(代表6种数列)

vector<int> fibonacci, lucas, pell, triangular, square, pentagonal
//可以用指针系来指向vector<int>
vector<int> *pv = 0;
//pv可以依次指向每一个用于表示数列的vector
pv = &fibonacci;
pv = lucas;
...
//但这种方式会牺牲程序的透明性,另一种解法是将每个数列的内存地址存入某个vector中
//于是我们可以通过索引的方式,透明的存取这些数列
const int seq_cnt = 6;

//一个指针数组,容量为seq_cnt
//每个指针都指向vector<int>对象
vector<int> *seq_addrs[seq_cnt] = {
    &fibonacci,&lucas,&pell,
    &triangular,&square,&pentagonal
};
//seq_addrs是一个数组
seq_addrs[0]//就是fibonacci vector的地址
//那我们就通过一个索引值来存取个别的vector
vector<int> *current_vec = 0;
for(int ix = 0 ; ix < seq_cnt ; ++ix)
{
    current_vec = seq_addrs[ix];
    //所有想要显示的元素都通过current_vec间接获取所得
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:47:57  更:2022-09-15 01:51:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:11:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码