c++ベース(1)

7960 ワード

c++primerを読み直し、詳細を学習します.
[cpp] view plain copy print ?
#include

  • using namespace std;

  • int main()
  • {

  • int sum=0, value;
  • while(cin>>value)

  • sum+=value;
  • cout<<"Sum is:"<
    return 0;
  • }
  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int sum=0, value;
    	while(cin>>value)
    		sum+=value;
    	cout<<"Sum is:"<<sum<<endl;
    	return 0;
    }

    8行目、while条件テスト入力オペレータの戻り結果、テストstd::cin.ファイル終端(end-of-file)または無効な入力に遭遇した場合、整数以外の値を読み込んだ場合、失敗します.
    [cpp] view plain copy print ?
    #include
  • #include

  • using namespace std;

  • int main()

  • {
  • vector ivec;

  • for(vector::size_type ix=0; ix!=10;++ix)
  • {

  • ivec.push_back(ix);
  • }

  • for(vector::size_type ix=0; ix!=ivec.size();++ix)
  • {

  • cout<
  • }

  • return 0;
  • }
  • #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
    	vector<int> ivec;
    	for(vector<int>::size_type ix=0; ix!=10; ++ix)
    	{	
    		ivec.push_back(ix);
    	}
    	for(vector<int>::size_type ix=0; ix!=ivec.size(); ++ix)
    	{
    		cout<<ivec[ix]<<endl;
    	}
    	return 0;
    }

    vectorの簡単な使い方.
    [cpp] view plain copy print ?
    #include
  • #include

  • using namespace std;

  • int main()

  • {
  • vector ivec;

  • for(vector::size_type ix=0; ix!=10;++ix)
  • {

  • ivec.push_back(ix);
  • }

  • for(vector::iterator iter=ivec.begin(); iter!=ivec.end();++iter)
  • {

  • cout<<*iter<
  • }

  • return 0;
  • }
  • #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
    	vector<int> ivec;
    	for(vector<int>::size_type ix=0; ix!=10; ++ix)
    	{	
    		ivec.push_back(ix);
    	}
    	for(vector<int>::iterator iter=ivec.begin(); iter!=ivec.end(); ++iter)
    	{
    		cout<<*iter<<endl;
    	}
    	return 0;
    }

    反復器iteratorの使用.
    [cpp] view plain copy print ?
    #include

  • using namespace std;

  • int main()
  • {

  • const size_t array_size = 10;
  • int ia[array_size];

  • for(size_t ix=0; ix!=array_size;++ix)

  • ia[ix]=ix;
  • for(size_t ix=0; ix!=array_size;++ix)

  • cout<
  • return 0;

  • }
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	const size_t array_size = 10;
    	int ia[array_size];
    	
    	for(size_t ix=0; ix!=array_size; ++ix)
    		ia[ix]=ix;
    	for(size_t ix=0; ix!=array_size; ++ix)
    		cout<<ia[ix]<<endl;
    	return 0;
    }

    配列の下に表示される正しいタイプはsize_です.t.
    [cpp] view plain copy print ?
    #include

  • using namespace std;

  • int main()
  • {

  • int ival = 1024;
  • int *piv = &ival;

  • int **ppiv = ϖ
  • cout<
    return 0;
  • }
  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int ival = 1024;
    	int *piv = &ival;
    	int **ppiv = ϖ
    	cout<<ival<<endl<<*piv<<endl<<**ppiv<<endl;
    	return 0;
    }

    ポインタを指すポインタ.
    [cpp] view plain copy print ?
    const double a = 3.14;
  • double *pa = &a;//error, pa is a plain pointer

  • const double *pb = &a;//ok, a pointer to const
  • //constオブジェクトを指すポインタで、その指すconst値をポインタで変更することは許されません.

  • //しかし、他のオブジェクトを指すことができます.

  • int errNumb = 0;
  • int *const curErr = &errNumb;

  • //constポインタ、constポインタの値は変更できません.curErrを他のオブジェクトに向けることはできません.
    	const double a = 3.14;
    	double *pa = &a;	//error, pa is a plain pointer
    	const double *pb = &a;//ok, a pointer to const
    	//  const     ,             const 。
    	//           。
    
    	int errNumb = 0;
    	int *const curErr = &errNumb;
    	//const  ,const        ,      curErr      。

    [cpp] view plain copy print ?
    //動的配列の作成
  • int *pia = new int[10];//arrays of 10 uninitialized ints

  • int *pia2 = new int[10]();//arrays of 10 initialized ints, all 0
    //      
    	int *pia = new int[10];//arrays of 10 uninitialized ints
    	int *pia2 = new int[10]();//arrays of 10 initialized ints, all 0

    [cpp] view plain copy print ?
    //シフトオペレータ中優先度:
  • //優先度は算術演算子より低いが、リレーショナル演算子、付与オペレータ、条件オペレータよりも優先度が高い.

  • cout<<42+10;//ok
  • cout<<(10<42);//ok

  • cout<<10<42;//error
    	//            :
    	//           ,       、               。
    	cout<<42+10;//ok
    	cout<<(10<42);//ok
    	cout<<10<42;//error

    [cpp] view plain copy print ?
    #include
  • using namespace std;

  • void reset(int *ip)

  • {
  • *ip = 0;//IPが指すint値
  • を変更する
    //ip = 0;//IPの局所変数のみを変更し、外部に影響を及ぼさない
  • }

  • int main()

  • {
  • int i = 42;

  • int *p = &i;
  • cout<<"i:"<<*p<
    reset(p);
  • cout<<"i:"<<*p<
  • return 0;

  • }
    #include <iostream>
    using namespace std;
    
    void reset(int *ip)
    {
    	*ip = 0;//  ip    int 
    	//ip = 0;//    ip     ,      
    }
    
    int main()
    {
    	int i = 42;
    	int *p = &i;
    	cout<<"i:"<<*p<<endl;
    	reset(p);
    	cout<<"i:"<<*p<<endl;
    
    	return 0;
    }
    
    

    結果:
    i:42
    i:0
    [cpp] view plain copy print ?
    #include
  • using namespace std;

  • void reset(int *ip)

  • {
  • //*ip = 0;//IPが指すint値
  • を変更する
    ip = 0;//IPの局所変数のみを変更し、外部に影響を及ぼさない
  • }

  • int main()

  • {
  • int i = 42;

  • int *p = &i;
  • cout<<"i:"<<*p<
    reset(p);
  • cout<<"i:"<<*p<
  • return 0;

  • }
    #include <iostream>
    using namespace std;
    
    void reset(int *ip)
    {
    	//*ip = 0;//  ip    int 
    	ip = 0;//    ip     ,      
    }
    
    int main()
    {
    	int i = 42;
    	int *p = &i;
    	cout<<"i:"<<*p<<endl;
    	reset(p);
    	cout<<"i:"<<*p<<endl;
    
    	return 0;
    }
    
    

    結果:
    i:42
    i:42