更新中...
----------------------------------------------------------------------------
const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别?
const int a == int const a, 定义int常量a
const int *a; 可写作int const* a. 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
----------------------------------------------------------------------------
i++ 与 ++i 的效率哪个更高?
++i 比 i++ 的效率更加高一些,因为++i 不用生成临时变量而 i++要生成临时变量
----------------------------------------------------------------------------
自定义类型的 前缀++i 和后缀i++的重载的实现方式有什么区别?
自定义类型的 前缀和后缀 的重载的 实现方式如下:
说明:如果考虑对 前缀(++i --i) 重载形式为 Type operator++() ;
后缀(i++ i--)的重载形式为:Type operator++(int); (这样定义是为了实现前缀与后缀的区分)
//++i 的实现方式
INT INT::operator++()
{
*this = *this +1;
return *this;
}
//i++的实现方式
const INT INT::operator++(int)
{
INT oldvalue = *this;
*this = *this+1;
return oldvalue;
}
----------------------------------------------------------------------------
迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。
(1) 每种容器类型都定义了自己的迭代器类型,如vector: vector<int>::iterator iter; 可以使用迭代器读取vector中的每一个元素.
(2) iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
----------------------------------------------------------------------------
C++标准库里vector是一种数据结构,一种顺序容器。可以创建vector对象,插入并删除元素,使用下标访问,读取向量大小,清空容器,排序,反转
其中的元素是严格按照线性顺序排列储存的,可以理解为动态数组,操作和常规的数组类型类似;
不同的是,vector里的存储空间分配自动完成,可以根据需要动态扩容和缩小。
# include<vector>
vector<int> vec // 创建vector对象,类型可以是int, double, string, 结构体
vec.push_back(a) // 尾部插入数字
v.push_back( i ); //把元素i存入到vector中i
//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。
所以每一行的长度是可以变化的。之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。
vector< vector<int> > Array( 10, vector<int>(0) );
vector 定义结构体对象案例:
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
typedef struct rect
{
int id;
int length;
int width;
//对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。
bool operator< (const rect &a) const
{
if(id!=a.id)
return id<a.id;
else
{
if(length!=a.length)
return length<a.length;
else
return width<a.width;
}
}
}Rect;
int main()
{
vector<Rect> vec;
Rect rect;
rect.id=1;
rect.length=2;
rect.width=3;
vec.push_back(rect);
vector<Rect>::iterator it=vec.begin();
cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;
return 0;
}