C++の列コンテナの「最後の要素」だけ扱いを変えたい(自分用メモ)

C++の列コンテナを操作しているときに,最後の要素だけ扱いを変えたいことがあります.
(何らかのメタプログラミング,つまりプログラムを使ってプログラムを生成したい場面にしばしばこのような処理の必要が生じます).
vector::size() を使って列の長さを取得して size_t でアクセスすることにしても良いのですが,今回書いていたコードでそのようにすると前半と後半でiteratorアクセス/添字アクセスと切り替わって見苦しいので方法を調べました.

/*---------------------------------------------
   iterator で,列の最後の要素だけ特別扱いしたい
 *---------------------------------------------*/

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int main()
{
	typedef vector<string> svector;
	svector a{"first", "second", "third", "fourth", "fifth", "sixth", "last"};

	auto end = ++(a.rbegin());
	for(auto i = a.begin(); i != a.end(); ++i)
	{
		cout << *i << flush;
		if(i != end.base()){ 
			cout << "," << flush; 
		}else{
			cout << ";" << endl;
		}
	}
	return 0;	
}

/*-----------------------------------------------
 出力:
 first,second,third,fourth,fifth,sixth,last;
-----------------------------------------------*/
コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。