数组
在c语言中,我们说数组是随机存取的,存取的方式就是下标索引法。即假如我们要存或取一个数组的第n个元素,方法是一致的,都是“数组名[n-1]”。合法的操作是这个数组它的的确确具有第n个元素。
vector
在STL中,我们说vector也是随机存取的,存取方式有两种,一种是下标索引法,一种是调用成员函数at。后者相较于前者的区别是后者可以检验是否出界,更加安全,但时间效率不如前者。
初学者在使用vector时,不像数组一样会设定一个容量。当我们没有提前声明vector的容量时,计算机会给它先分配一个存储空间,每当我们push_back时,计算机都会检测存储空间是否已满,假如满了,先看看能不能在当前存储位置向后扩大内存空间,若不可以,则从新申请一片更大的内存空间,然后把原来的数据复制到新的内存空间中。
假如提前声明容量,例如下方第二个表达形式,那么计算机就会给vector分配20个int大小的内存空间,并且默认初始化为0.可假如没有提前声明容量,那么就要注意了,当我们再去存取某一个元素时,一定要注意不能存取空的对象,只能存取已有的对象。(看块2实例)
即下标只能用于获取已存在的元素,而不能获取还是空的对象。
//数组 int array[20]; //vector vector<int> v(20); //常用,即不会提前声明vector的容量 vector<int> v;//错误做法: vector<int> a; for (int i = 0; i < 10; i++) a[i] = i; //正确做法1: vector<int> a; for (int i = 0; i < 10; i++) a.push_back(i);

这篇博客探讨了C语言中的数组和STL中的vector在随机存取和内存管理上的异同。数组提供固定大小的连续内存,通过下标索引访问;而vector除了下标访问外,还提供了安全的at()函数,并在需要时动态调整内存。未预定义容量的vector在push_back()时可能涉及内存重新分配,可能导致效率下降。强调使用vector时需注意避免越界和正确使用push_back()添加元素。

2221

被折叠的 条评论
为什么被折叠?



