char类型最大值不能超过256,因其只能表示8位二进制
即 char=256;将会溢出。
使用复数:
如:#include <complex>
complex<double> a;
complex<double> b;
complec<double> c;
c=a*b+a/b;
也就是说复数可以像一般的类型一样使用,且可以用一个算术类型给其赋值。
如: double dval=3.14159;
complex<double> comp=dval;
但用复数对算术类型进行赋值时,需指明用哪一部分:
double re=comp.real();
double im=comp.imag();//其中comp是一个复数
c++支持复数的输入和输出,复数输出是一个由逗号分隔的序列对,第一个值为实部,
第二个值为虚部
如:complex<double> complex0(3.14159,-2.171);
cout<<complex0<<endl;
输出结果为:(3.14159,-2.171)
复数支持的其他操作有:sqrt()、abs()、polar()、sin()、cos()、tan()、exp()、log()
log10()、 pow() 。
下面代码实现了复数中的运算符(++)重载
e complex<double>&
operator++(complex<double> &cval)
{
cval=cval+complex<double>(1);
return cval;
}
void main()
{
complex<double> cval(4.0, 1.0);
cout<<cval<<endl;
++cval;
cout<<cval<<endl;
}
sizeof操作符
返回类型为size_t,这是一种与机器相关的typedef定义,可以在cstddef头文件中找到
它的定义。如:
#include <cstddef>
int ia[] = { 0, 1, 2 };
//sizeof返回整个数组的大小
size_t array_size = sizeof ia;
//sizeof返回int类型的大小
size_t element_size = array_size / sizeof( int );
结果:sizeof指示ia的长度为12字节,是整个数组的字节长度。即3个整型。
int *pi=new int[3];
size_t pointer_size = sizeof ( pi );
sizeof(pi)返的值是指向int型的指针的字节长度,而不是pi指向的数组的长度。
sizeof(char)在所有的C++实现中都是1
vector容器类型
vector类是随标准c++引入的标准库的一部分。其对应的头文件是:#include <vector>
使用实例:
1、定义一个已经长度的vector:
vector< int > ivec( 10 );
与如下定义一个包含十个元素的内置数组相似:
int ia[ 10 ];
2、可用下标操作访问vector的元素,与访问内置数组的元素方式一样。
如:void simplt_example()
{
const int elem_size=10;
vector< int > ivec( elem_size );
int ia[ elem_size ];
for(int ix = 0; ix < elem_size; ++ix)
ia[ ix ]=ivec[ ix ];
}
3、可用size()查询vector大小,用empty()测试是否为空。如:
void print_vector( vector<int> ivec)
{
if ( ivec.empty() )
return;
for( int ix = 0; ix < ivec.size(); ++ix )
cout<<ivec[ ix ]<<' ';
}
4、对元素进行显式的初始值来完成初始化。如:
vector< int > ivec( 10, -1 );
表示:定义了ivec,它包含十个int型的元素,每个元素都被初始化为-1
注:它不能像初始化数组一样对其进行初始化。
但可以用一个已有数组的全部或一部分进行初始化。
如:int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
//把ia的6个元素拷贝到ivec中
vector< int > ivec( ia, ia+6 );
//拷贝3个元素:ia[2], ia[3], ia[4]
vector< int > ivec( &ia[2], &ia[5] );
5、与数组不同,vector可以被另一个vector初始化,或被赋给另一个vector。
如:vector< string > svec;
void init_and_assign()
{//用另一个vector初始化一个vector
vector< string > user_names( svec );
//.....
//把一个vector拷贝给另一个vector
svec = user_names;
volatile限定修饰符
当一个对象的值可能会在编译器的控制或监测之外被改变时,如一个被系统时钟更新
的变量,则该对象应该声明为volatile。这样可以提示编译器,该对象的值可能在编译器未监
测到的情况下被改变。因此编译器不能武断地对引用这些对象的代码作优化处理。
使用方法同const
如:volatile int display_register;
pair类型
pair类也是标准库的一部分,可以在单个对象内部把相同类型或不同类型的两个值
关联起来。所需要的头文件:#include <utility>
如:pair< string, string > author( "James", "Joyce" );
创建一个pair对象author,包含两个字符串,分别初始化为××,××
两个成员访问符号:first ,second
则:string aa=author.first; string bb=author.second;
则aa就是它的第一个元素,bb就是第二个元素。
bitset操作:
test(pos) pos位是否为1 a.test(4)
any() 任意位是否为1 a.any()
none() 是否没有位为1 a.none()
count() 值为1的位的个数 a.count()
size() 位元素的个数 a.size()
[pos] 访问pos位 a[4]
flip() 翻转所有的位 a.flip()
flip(pos) 翻转pos位 a.flip(4)
set() 将所有位置1 a.set()
set(pos) 将pos置1 a.set(4)
reset() 将所有位置0 a.reset()
reset(pos) 将pos位置0 a.reset(4)
显式类型转换:
显示转换符号的一般形式为:cast-name< type >(expression);
cast-name是static_cast、const_cast、dynamic_cast、reinterpret_cast之一。
如:const_cast< int >(str);
隐式执行的任何类型转换都可以由static_cast显式完成
如:double d = 97.0;
char ch=static_cast< char >( d );