指针和引用的区别;vector;双冒号

1、指针是指向一个对象,它自己本身也有值,其值是所指向对象的地址。引用是一个对象的别名,指向同一个对象,它本身无值。

2、指针可为空,引用不能为空,引用必须初始化,所以使用指针之前必须要判空。

3、指针可以改变指向,但是引用不能改变,除非是变量自身在改变的一些操作是可以的。

4、再次,引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节

5、最后,引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为NULL,所以不安全。const 指针虽然不能改变指向,但仍然存在空指针,并且有可能产生野指针(即多个指针指向一块内存,free掉一个指针之后,别的指针就成了野指针)。

总而言之,言而总之——它们的这些差别都可以归结为"指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用不改变指向。"(此段为摘录)

6、虽然指针和引用最终在编译中的实现是一样的,但是引用的形式大大方便了使用也更安全。有人说:"引用只是一个别名,不会占内存空间?"通过这个事实我们可以揭穿这个谎言!实际上引用也是占内存空间的。

通过以上内容大体了解到,具体的应用中还要仔细揣摩,交换中就有相关的应用,值传递和地址传递。

vector:

摘自百度答案

vector 一般把它叫做动态数组,但是其实它是一个顺序容器,能够在尾部高效的插入和删除数值,同时支持随机访问其中的值,也就是说vector重载了[]运算符。但是不支持在前端进行同样的操作,而deque支持在两端完成同样的操作。在C++中凡是使用数组的地方,都可以使用vector。它的一个最大特点是可以动态的增加大小,无需程序员关心,你可以使用push_back(),往对象里面插入数据。下面是他的一些成员函数的测试!

#include<iostream> 
#include<vector> 
/*******主要是测试一下vector的各个 
成员函数的用法。 
********/ 
using namespace std; 

int main() 
{ 
vector<int> v; 
vector<int> w; 

int n; 

while(cin>>n) 
v.push_back(n);//在其尾部添加值 

cout<< v.at(1)<<endl;//相当于[]运算符,数组从零开始计数s 

copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); 

cout<<endl; 
v.erase(v.begin());//删除指定位置上的元素,参数为迭代器。此函数重载了,可以指定一个范围或者是一个位置 
v.erase(v.begin(),v.begin()+3);//同样是左闭右开区间 

copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); 
cout<<endl; 
int a[]={12,11,32}; 
/* 
insert()也进行了重载,如下面的 
例子所示: 
*/ 
v.insert(v.begin(),9);//表示在指定迭代器位置的前面插入一个值 
v.insert(v.begin(),2,10);//表示在指定迭代起位置的前面插入若干个值,本例子为插入2个10 
v.insert(v.begin(),a,a+3);//在指定迭代器位置的前面插入一个范围的数值,同样是左闭右开区间 

copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); 
cout<<endl; 
v.reserve(4);//这个函数有什么用处?还待测试 
v.swap(w);//更另外的一个vector的数据交换 

copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); 
cout<<endl; 
copy(w.begin(),w.end(),ostream_iterator<int>(cout," ")); 

copy(v.rbegin(),v.rend(),ostream_iterator<int>(cout," ")); 
return 0; 
}
双冒号:

1、作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分

2、全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如

3、::是C++里的“作用域分解运算符”。比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值