Accelerated C++笔记 10章




数组的大小:size_t //<cstddef>


数组不是类,因此没有成员(例如:size_type), size_t作为一个更普遍的类型,可(bi)以(xu)用来表示数组的大小。


数组用于标准库算法


假设a是一个具有n个元素的数组,v是一个向量,那么将a用于标准库算法时,应用 a 和 a + n 替代 v.begin() 和 v.end()。


a + n 虽然超出了数组的范围,但这一地址是有效的。


//e.g. copy a to v


copy ( a, a + n, back_inserter(v) );


//construct v by a


vector<int> v(a, a + n);


 


strlen() //<cstring>头


strlen函数不计算最后的 '\0'。一种可能的实现:


1
2
3
4
5
6
7
size_t  strlen const  char * p )
{
     size_t  size = 0;
     while  ( *p++ !=  '\0'  )
     ++size;
     return  size;
}

 


获取数组的长度


std::size_t n = sizeof( a ) / sizeof( *a );


 


static


如果一个函数会被多次调用,函数中那些const类型且每次调用都不变化变量可以生命为static的。这样在多次调用该函数时仅会在第一次调用时初始化这些变量。这使程序更高效。


//e.g.


static const int week[] = {1, 2, 3, ,4, 5, 6, 7};


 


main的两个参数


第二个参数是一个指向一个指针数组的指针


第一个参数是第二个参数指向的指针数组的指针个数。


int main( int agc, char** argv )



ifstream / ofstream //<fstream>头


一个例子:将in.txt内容复制到out.txt


1
2
3
4
5
6
7
8
9
10
int  main()
{
     std::string instr =  "F:\\in.txt" ;
     std::ifstream infile(instr);
     std::ofstream outfile( "F:\\out.txt" );
     std::string s;
     while  (std::getline(infile, s))
         outfile << s << std::endl;
     return  0;
}

 


static & dynamic


0.


int* invalid_pointer()


{


    int x;


    return &x;


} //错误,函数结束时x的内存被释放,返回的指针是无效的。


 


1.


int* point_to_static ()


{


    static int x;


    return &x;


} //xstatic的,程序结束时才会释放x的内存,因此该函数每次返回指向同一个对象的指针。


2.


int* point_to_dynamic ()


{


    return new int(0);


} //动态分配的对象会一直存在,直到delete。本函数每次返回指向一个新对象的指针。


 


数组内存的动态分配


T* p = new T[n];    //对数组进行默认初始化,即①内部类型+局部作用域→不初始化;②类→默认构造函数初始化


 


delete[] p;




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值