C++講座 第4回

2008-05-30にやった内容です.

vectorに構造体を入れたり,iostreamを使ったり.

ここに書いてあるソースは全くチェックしてないのでコンパイルできないかも.

vectorに構造体を入れる

xとyの2つのメンバを持つPoint構造体をvectorに入れてみましょう.

C++では,構造体をtypedefする必要はありません.

「Point」を入れるので,

	vector<Point> points;

と宣言すればOKです.

#include <vector>
#include <stdio.h>
using namespace std;

struct Point{
	int x,y;
};

int main(){
	vector<Point> points;
	Point p;

	p.x=0; p.y=0;
	points.push_back(p);

	p.x=3; p.y=10;
	points.push_back(p);

	p.x=86; p.y=90;
	points.push_back(p);

	// 全て表示

	return 0;
}

表示の仕方はもう大丈夫だと思いますが一応.

	int i;
	for (i=0;i<points.size();i++) {
		printf("x,y : %d,%d\n",points[i].x,points[i].y);
	}

points[i]がPoint型なので,後ろに「.x」とかをつければメンバにアクセスできます.

iostream

C++でHello, world!

いままで,Cの標準関数のprintfやscanfを使って入出力をしてきました. しかし,string型等,Cに無い型は表示したり入力したりできませんでした. C++の入出力はcinやcoutを使います.

出力は「cout」と「<<」を使います.

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

int main(){
	cout << "Hello, world!\n";

	string s = "hoge";
	int d = 11;
	cout << s << d << endl; // stringもそのまま表示できます

	return 0;
}

endlは改行です.

入力はcinと「>>」を使います.

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

int main(){

	string s;
	int d;
	cin >> d;
	cin >> s;

	cout << d << s << endl;

	return 0;
}

「<<」とか「>>」はCではシフト演算子でした. C++でもこれらはシフト演算子ですが,演算子のオーバーロードという機能で 演算子の動作を変更できます.

おまけ

自分で定義した構造体などの型も表示できるようにしてみましょう.

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

struct Point{
	int x,y;
};

ostream& operator<< (ostream &os,const Point &p) {
	os << "x:" << p.x << " y:" << p.y ;
	return os;
}

int main(){
	vector<Point> points;
	Point p;

	p.x=0; p.y=0;
	points.push_back(p);

	p.x=3; p.y=10;
	points.push_back(p);

	p.x=86; p.y=90;
	points.push_back(p);

	int i;
	for (i=0;i<points.size();i++) {
		cout << points[i] << endl;
	}

	return 0;
}

また分けの分からないことをしていますが, 今はこういうものだと思ってください.

Texts

total: 1807  / today: 1  / yesterday: 0  / now: 1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-09-22 (火) 17:41:15 (1372d)