Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
LINQ for C++ のご紹介
@mikiemon_h
目次
・私について
・LINQ for C++ ってなんだ?
・導入方法
・LINQ for C++ の使い方
・その他の機能
・まとめ
私について
Twitter : @mikiemon_h
普通の人。
・公での発表的なものは、これが初。
・仕事は、スマホ向けのゲームアプリ開発。
・最近はもっぱら Unity で C# な感じ。
・ここ数年、まともに C++ を書いてない…。
...
LINQ for C++ ってなんだ?
一言でいうと、
C++上でLINQと似たような機能を
実現するライブラリ
…らしい、です。
LINQ ってなんだ?
統合言語クエリ (LINQ, Language INtegrated
Query, リンクと発音する)とは、.NET
Framework 3.5において、様々な種類のデータ集
合に対して標準化された方法でデータを問い合
...
?
ちょっと私にはサッパリ…。
C# での例を見てみましょう。
※ 一部省略されていますが、そこはエスパーしてください。
LINQ for C# の例
var customers = new [] {
new { id = 2, firstName = "Steve", lastName = "Jobs" },
new { id = 3, firstName = ...
!
何となく判りました…よね?
それでは LINQ for C++ の導入方法と
使い方を見ていきましょう。
導入方法
・LINQ for C++ のページにアクセス。
(URL https://cpplinq.codeplex.com/)
・Downloads から cpplinq.hpp をダウンロード。
・cpplinq.hpp を #inclu...
LINQ for C++ の使い方
使い方を把握する為に、
先程の LINQ の説明で登場した
C# での例と同等のものを書いてみて、
比較してみましょう。
※ 一部省略されていますが、そこはエスパーしてください。
LINQ for C# の例(再掲)
var customers = new [] {
new { id = 2, firstName = "Steve", lastName = "Jobs" },
new { id = 3, firstNam...
LINQ for C++ の例 1
using namespace cpplinq;
std::vector<customer> customers = {
{ 2, "Steve", "Jobs" },
{ 3, "Richard", "St...
例 1 で登場した機能
・from
→ 操作対象のコンテナを設定する。
・where
→ 条件を満たす要素のみ取り出す。
・orderby
→ 昇順にソートする。
・select
→ 要素を射影する。
・to_vector
→ std::vec...
使い方が大体判ったところで
その他の機能をちょっとだけご紹介
※ 決して面倒くさくなったとかじゃないです。
色々と考慮した結果です。
信じてください。
例 2
std::vector<int> a = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 };
std::vector<int> b = { 0, 2, 4, 6, 8, 10, 12 };
show(from(a) >>...
例 2 で登場した機能
・take
→ 指定個数だけ取り出す。
・skip
→ 指定個数読み飛ばす。
・take_while
→ 条件を満たす間だけ取り出す。
・skip_while
→ 条件を満たす間だけ読み飛ばす。
例 3
int a[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 };
int b[] = { 0, 2, 4, 6, 8, 10, 12 };
show(from_array(a) >> distinct () >> ...
例 3 で登場した機能
・from_array
→ 操作対象の配列を設定する。
・distinct
→ 重複を取り除く。
・union_with
→ 和集合を求める。
・intersect_with
→ 積集合を求める。
・except
→ 差...
その他の機能
・from_iterators
・range
・sum / max / min
・concatenate
・to_map / to_lookup
・for_each
・first / first_or_default
… 等
まとめ
・導入がとても簡単。
・LINQ for C++ を使う事で、LINQ にある操作が
有る程度は実現出来る。
・LINQ の構文に寄せてあるので、使い方も
割と簡単。
・Boost じゃない。
質疑応答
有難う御座いました!
Upcoming SlideShare
Loading in …5
×

Boost17 cpplinq

3,418 views

Published on

boost.勉強会#17「LINQ for C++ のご紹介」

Published in: Engineering
  • Be the first to comment

Boost17 cpplinq

  1. 1. LINQ for C++ のご紹介 @mikiemon_h
  2. 2. 目次 ・私について ・LINQ for C++ ってなんだ? ・導入方法 ・LINQ for C++ の使い方 ・その他の機能 ・まとめ
  3. 3. 私について Twitter : @mikiemon_h 普通の人。 ・公での発表的なものは、これが初。 ・仕事は、スマホ向けのゲームアプリ開発。 ・最近はもっぱら Unity で C# な感じ。 ・ここ数年、まともに C++ を書いてない…。 なんか、ごめんなさい…。
  4. 4. LINQ for C++ ってなんだ? 一言でいうと、 C++上でLINQと似たような機能を 実現するライブラリ …らしい、です。
  5. 5. LINQ ってなんだ? 統合言語クエリ (LINQ, Language INtegrated Query, リンクと発音する)とは、.NET Framework 3.5において、様々な種類のデータ集 合に対して標準化された方法でデータを問い合 わせる(クエリ)ことを可能にするために、言 語に統合された機能のことである。 - Wikipedia 統合言語クエリ より引用 - (URL http://goo.gl/3ITZ5)
  6. 6. ? ちょっと私にはサッパリ…。 C# での例を見てみましょう。 ※ 一部省略されていますが、そこはエスパーしてください。
  7. 7. LINQ for C# の例 var customers = new [] { new { id = 2, firstName = "Steve", lastName = "Jobs" }, new { id = 3, firstName = "Richard", lastName = "Stallman" }, new { id = 1, firstName = "Bill", lastName = "Gates" }, new { id = 4, firstName = "Linus", lastName = "Torvalds" } }; var result = from c in customers where c.id <= 2 orderby c.id select c.firstName; foreach (var name in result) System.Console.WriteLine(name); ←この辺が LINQ Bill Steve
  8. 8. ! 何となく判りました…よね? それでは LINQ for C++ の導入方法と 使い方を見ていきましょう。
  9. 9. 導入方法 ・LINQ for C++ のページにアクセス。 (URL https://cpplinq.codeplex.com/) ・Downloads から cpplinq.hpp をダウンロード。 ・cpplinq.hpp を #include する。 なんか NuGet 経由で取得する事も出来るらしいですよ。
  10. 10. LINQ for C++ の使い方 使い方を把握する為に、 先程の LINQ の説明で登場した C# での例と同等のものを書いてみて、 比較してみましょう。 ※ 一部省略されていますが、そこはエスパーしてください。
  11. 11. LINQ for C# の例(再掲) var customers = new [] { new { id = 2, firstName = "Steve", lastName = "Jobs" }, new { id = 3, firstName = "Richard", lastName = "Stallman" }, new { id = 1, firstName = "Bill", lastName = "Gates" }, new { id = 4, firstName = "Linus", lastName = "Torvalds" } }; var result = from c in customers where c.id <= 2 orderby c.id select c.firstName; foreach (var name in result) System.Console.WriteLine(name); ←この辺が LINQ Bill Steve
  12. 12. LINQ for C++ の例 1 using namespace cpplinq; std::vector<customer> customers = { { 2, "Steve", "Jobs" }, { 3, "Richard", "Stallman" }, { 1, "Bill", "Gates" }, { 4, "Linus", "Torvalds" }, }; auto result = from(customers) >> where ([](customer const& c) { return c.id <= 2; }) >> orderby ([](customer const& c) { return c.id; }) >> select ([](customer const& c) { return c.first_name; }) >> to_vector(); for (auto name : result) cout << name << endl; Bill Steve この辺が LINQ for C++ ↓
  13. 13. 例 1 で登場した機能 ・from → 操作対象のコンテナを設定する。 ・where → 条件を満たす要素のみ取り出す。 ・orderby → 昇順にソートする。 ・select → 要素を射影する。 ・to_vector → std::vector に変換する。
  14. 14. 使い方が大体判ったところで その他の機能をちょっとだけご紹介 ※ 決して面倒くさくなったとかじゃないです。 色々と考慮した結果です。 信じてください。
  15. 15. 例 2 std::vector<int> a = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 }; std::vector<int> b = { 0, 2, 4, 6, 8, 10, 12 }; show(from(a) >> take(5) >> to_vector()); show(from(a) >> skip(5) >> to_vector()); show(from(a) >> take_while([](int const x) { return x != 2; }) >> to_vector()); show(from(a) >> skip_while([](int const x) { return x != 2; }) >> to_vector()); 0 0 1 1 2 2 3 3 4 4 0 0 1 1 2 2 3 3 4 4
  16. 16. 例 2 で登場した機能 ・take → 指定個数だけ取り出す。 ・skip → 指定個数読み飛ばす。 ・take_while → 条件を満たす間だけ取り出す。 ・skip_while → 条件を満たす間だけ読み飛ばす。
  17. 17. 例 3 int a[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 }; int b[] = { 0, 2, 4, 6, 8, 10, 12 }; show(from_array(a) >> distinct () >> to_vector()); show(from_array(a) >> union_with (from_array(b)) >> to_vector()); show(from_array(a) >> intersect_with (from_array(b)) >> to_vector()); show(from_array(a) >> except (from_array(b)) >> to_vector()); 0 1 2 3 4 0 1 2 3 4 6 8 10 12 0 2 4 1 3
  18. 18. 例 3 で登場した機能 ・from_array → 操作対象の配列を設定する。 ・distinct → 重複を取り除く。 ・union_with → 和集合を求める。 ・intersect_with → 積集合を求める。 ・except → 差集合を求める。
  19. 19. その他の機能 ・from_iterators ・range ・sum / max / min ・concatenate ・to_map / to_lookup ・for_each ・first / first_or_default … 等
  20. 20. まとめ ・導入がとても簡単。 ・LINQ for C++ を使う事で、LINQ にある操作が 有る程度は実現出来る。 ・LINQ の構文に寄せてあるので、使い方も 割と簡単。 ・Boost じゃない。
  21. 21. 質疑応答
  22. 22. 有難う御座いました!

×