配列の取り扱い

1次元配列を関数に渡したい場合は以下のようにする.

#include <string>
#include <iostream>
#include <vector>
using namespace std;

void change(string strseq,char *cseq);
 
int main()
{
	string strseq="ARNDCQEGHI";
	char cseq[strseq.length()];
	change(strseq,cseq);
	
	for(unsigned int i=0;i<strseq.length();i++)
	{
		cout<<cseq[i];
	}
	cout<<endl;
}
 
void change(string strseq,char *cseq)
{
	for(unsigned int i=0;i<strseq.length();i++)
	{
		cseq[i]=strseq.c_str()[i];
	}
}

2次元配列の場合は以下のようにする.

#include <string>
#include <iostream>
#include <vector>
using namespace std;

void change(string strseq,char (*cseq)[3]);
 
int main()
{
	string strseq="AAAAGAGAGG";
	char cseq[strseq.length()][3];
	change(strseq,cseq);
	
	for(unsigned int i=0;i<strseq.length();i++)
	{
		cout<<cseq[i];
	}
	cout<<endl;
}
 
void change(string strseq,char (*cseq)[3])
{
	for(unsigned int i=0;i<strseq.length();i++)
	{
		if(strseq[i]=='A')
		{
			cseq[i][0]='6';
			cseq[i][1]='5';
			cseq[i][2]='\0';
		}
		else if(strseq[i]=='G')
		{
			cseq[i][0]='7';
			cseq[i][1]='1';
			cseq[i][2]='\0';
		}
	}
}

2次元配列の要素数を知りたい場合は以下のようにする.2次元配列をXとした場合において,全要素数と各要素のサイズの積は sizeof(X) で計算でき,それを各要素のサイズ sizeof(X[0][0]) を割ることで求まる.さらに,全要素数と各要素数のサイズを各列の要素数と要素のサイズの積は sizeof(seq[0]) で計算できるため,これで sizeof(X) を割ると,行の数が計算できる.同様に列数も計算できる.

#include <string>
using namespace std;

int main()
{
	int seq[3][8];
	
	int anum=sizeof(seq)/sizeof(seq[0][0]);
	int rnum=sizeof(seq)/sizeof(seq[0]);
	int cnum=sizeof(seq[0])/sizeof(seq[0][0]); /* anum/rnum と同義 */
}

配列はベクターを用いて表現する。C++11では配列を '{,}' によって一気に初期化できる。内容の読み出しは、10行目または18行目のようにforを用いると簡単にできる。要素の追加は push_back() で可能となる。

#include <string>
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<string> test={"foo","bar","baz"};
	
	for(auto i=0;i<test.size();i++)
	{
		cout<<test[i]<<" ";
	}
	cout<<endl;
	
	test.push_back("hoge");
	
	for(auto i=test.begin();i!=test.end();i++)
	{
		cout<<*i<<" ";
	}
	cout<<endl;
}

以上のコードを sample_1.cpp として保存し、それをコンパイルすることで program_1 を生成し、実行すると以下のようになる。

1|$g++ -std=c++11 sample_1 -o program_1
2|$program_1
foo bar baz
foo bar baz hoge
このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る