Essential C++学习记录&笔记整理5(如何运用Array和Vector)

说实话从这节开始就和C产生了隔阂了,很多知识都是新知识了,不好理解,尤其是这一节,我读了两遍,总算明白了些东西吧,实际上这还有很多需要了解的东西,慢慢了解去!

如何运用Array和 Vector

1.容器的定义

  • 容器:存放和操作其他对象的对象。1

2.array数组和Vector类

  • 在C++中,我们可以用其内置的array(数组)类型标准库提供的vector类来定义容器
  • 建议用vector,但现在大量程序代码都使用array
  • 定义array时:
    1.必须指定array的元素类型
    2.还要赋予array一个名称
    3.并指定array所能存储的元素个数
  • array的大小必须是个常量表达式(即一个不需要在运行时求值的表达式)
//例子:
const int seq_size=18;
int pell_seq[seq_size];
  • 定义vector时:
    1.必须包含vector头文件
    2. 由于vector是个class template(模板类),所以我们必须在类的名字之后的<>内指定其元素类型
    3.vector的大小写在小括号中,此处所给予的大小不一定得是个常量表达式
//例子:
#include<vector>
vector<int>pell_seq(seq_size);
  • 无论array还是vector,我们都可以指定容器中的某个位置,进而访问该位置上的元素。这里用到索引操作,索引操作通过下标运算符([ ])达成
  • 注意:容器的第一个元素位置为0!!!不是1!!!避免off-by-one!!!
//例子:指定pell数列的前两个元素值
pell_seq[0]=1;//指定第一个元素的值为1
pell_seq[1]=2;//指定第二个元素的值为2
  • for循环的条件表达式若在进入for循环的第一次求值是false,那么for循环直接跳过,不会执行步进表达式(废话)
  • 可以在for循环的三个表达式处留空,不写任何东西
//例子:
int ix=0;
//...
for(;ix<seq_size;++ix)
//...

  • 初始化列表内的元素个数,不能超过array的大小!
  • 如果初始化列表内的元素个数小于array的大小,剩下的元素值均给初始化为0
  • 还可以让编译器根据初值的数量,自行计算出array的大小。eg.int elem_seq[]={1,2,3,3,4,7};此时array(elem_seq)的大小为6。
  • vector不支持上述这种初始化列表。但vector允许我们可以为其每个元素指定每个元素的值(挨个=赋值)
  • vector可以用一个已经初始化的array作为该vector的初值
int elem_vals[seq_size]={1,2,3,3,4,7};
vector<int>elem_seq(elem_vals,elem_vals+seq_size)

括号内的两个值都是实际内存位置,标示出了“用以将vector初始化”的元素的范围。(关于赋值范围,你可以理解为对应复制方式的赋值,一一对应这样的,就不难理解这个范围了,这也是个规定,记住就好!)

  • vector知道自己的大小是多少,即定义vector类型的变量可以用变量名.size()来获取这个vector所包含元素的个数
//例子:
cout<<"The first"<<elem_seq.size()<<"...."
for(int ix=0;ix<elem_seq.size();++ix)
  cout<<pell_seq[ix]<<' ';

总之,理解这些东西不很容易,需要经过不断钻研和实践来体会!


  1. 《计算机科学概论》(第五版)第8章P161页——容器的定义 John·Lewis,Nell·Dale著 ↩︎

发布了18 篇原创文章 · 获赞 1 · 访问量 241

猜你喜欢

转载自blog.csdn.net/weixin_45910408/article/details/105317681
今日推荐