STLのstringで,str="100 200 400"のような文字をスペースで切り分けて,a=100,b=200,c=400...のようにしたいことがある. この場合,str.split(" "); のようにすれば適当に切り分けてvectorにでも出力してくれるんじゃないかと思っていたのだけど,調べたところsplitのようなものはどうも無いっぽく,代わりにCでstrtokという関数があるそうなのでこれを利用する. (stringから使う場合は(char*)str.c_str();する) strtokはstring.hの関数で,以下のような挙動をする. http://www9.plala.or.jp/sgwr-t/lib/strtok.html 【書式】 #include char *strtok(char *s1, const char *s2); 【説明】 分解対象文字列 s1 を、
この記事は C++ Advent Calendar 2014 の17日目の記事です.前日は @yutopp さんの Boost.Spirit.X3のご紹介 - C++ Advent Calendar 2014(16日目) でした. 最近 Boost.Spirit と LLVM で言語をちまちまと書いているので,Boost.Spirit と LLVM で言語つくるチュートリアルみたいなのを書こうと思ったのですが,チュートリアル用の言語の設計をあれこれ考えているうちに時間が経ってしまいました…ぼちぼち考えているので,別の機会に書きます. というわけで,今回は年の暮れということもあり,今年 GitHub の C++ Trending repositories で見た,気になるライブラリやフレームワーク7つについて紹介しようと思います. 紹介するライブラリやフレームワーク cppformat :
世の中にはわたしのようなライトC++書き向けの資料が不足しているので, 普段使い*1用途で収集したものをまとめてみました. ドキュメントを読む C++プログラミングガイド モダン C++ プログラミング - 日本語公開記事 - サイボウズエンジニアのWIKI STLのドキュメント cplusplus.com - The C++ Resources Network C++ reference - cppreference.com clangを使う Clang - Wikipedia gccよりもclangの方がC++ 規格に準拠しているとうたわれています. また, コンパイルもちょっと速い. *2 標準ライブラリを使う ∧∧∧∧∧∧∧∧∧ < STL!STL!STL!STL! > ∨∨∨∨∨∨∨∨∨ _ _ `/っ) /っ) / / ∧_∧ / / ∧_∧ \\( )\\(
オープンソースで有名なEric S. Raymondが、自由ソフトウェアで有名なRichard Stallmanに、GCCのアンチプラグインポリシーについて突っ込んでいる。 GCCは、長年、コンパイラーのモジュール化を政治的な理由で行っていなかった。もし、例えばパーサーや意味解析だけを分離して使えるようにしたり、内部表現を規格化したりしてしまうと、GCCの一部が、不自由なソフトウェアに取り込まれたり、あるいは不自由なソフトウェアがGCCのプラグインという形で入り込むことになってしまう。これは、利用者の自由を第一とする自由ソフトウェアにとって、悪夢のような未来である。そのような未来を未然に防ぐために、政治的な理由で、GCCのはプラグインに反対するポリシーを採用している。もし、GCCを改良したければ、自由なソフトウェアとなるべきなのだ。そして、GCCのプロジェクトに参加するべきなのだ。 とはい
最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L
かつて、ゲームプログラミングはアセンブリが主流で、8bitのCPUは掛け算や割り算すらないものでした。割り算がないCPUっていつの時代だよ、っていう人たちもおりますが、ゲームボーイアドバンスに搭載されているARM7TDMIは除算の命令を持っていません。(故に除算を書くと死ぬほど遅いので、乗算で代用したりする) また、浮動小数に対する演算ユニットを持っていないハードウェアもあります。ニンテンドーDSに搭載されているARM946E-Sですら、浮動小数演算ユニットはありません。(CPUの機能としてはオプションで存在する)そのために固定小数点といった技術もあるわけですが、古くさい話です。 これらはCとC++の機能を駆使していかにパフォーマンスを出すかを余儀なくされた時代です。 さておき、最近はスマートフォンでのゲーム開発も進化しており、C++がiPhoneとAndroidの両方で動くということもあ
Googleの「Portable Native Client」(PNaCl)が、ホワイトペーパーでの紹介から3年以上過ぎた米国時間11月12日、開発者に公開された。 PNaCl(「ピナクル」と発音)を使うことで、開発者はCおよびC++コードをコンパイルしてウェブアプリを作成できる。ネイティブコードからウェブへの「翻訳」を簡略化することにより、オーディオおよびビデオ圧縮解除ソフトウェア、画像編集ツール、あるいはビデオゲームを動かす複雑なエンジンなどを独自に作りたい開発者に、多大な恩恵をもたらす可能性がある。 Googleは、PNaClの公開を発表したブログ投稿の中で、PNaClの技術的側面を簡潔に説明した。アプリケーションを再コンパイルしてx86、ARM、MIPSなどさまざまなハードウェアを搭載するデバイス上で実行するという、プロセッサに大きな負荷をかけるタスクを回避するものだとしている。
図 6 を見ると、ラムダ式で変数と値を取得する方法を、プログラマが完全に制御できることがわかります。しかし、これによって値を使用するという考え方は保持できますが、複雑なデータ構造を値として効率よく操作することには役に立ちません。 不変データ型 不足しているのは、一部の関数型プログラミング言語にあるような効率的な不変データ構造です。このような言語では、不変データ構造は共通データを共有するため、非常に大きくなった場合でも、効率性を高めることができます。データを共有するデータ構造を C++ で作成するのは簡単です。データを動的に割り当てるだけで、各データ構造がそのデータへのポインターを保持します。残念ながら、共有変数の有効期間を管理するのが難しくなります (ガベージ コレクターが普及したのはこのためです)。さいわい、C++ 11 には、std::shared_ptr テンプレート クラスで共有変
そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GC ってなあたりでしょうか。コードは GitHub - kazuho/picogc: a tiny, portable, precise, mark-and-sweep GC in C++ にあります。 C++ のプロジェクトで、ちょっとここだけは GC がほしいんだけど、ってなケースで使いやすいと思います。速度も、そこそこでるんじゃないかな*2。 というわけで、以下、サンプルコード。軽く説明しておくと、 GC を使うクラスは picogc::gc_object を継承する
FreeBSD - The Power To Serve FreeBSDプロジェクトはベースシステムからGPLv2のコードを排除する取り組みを続けている。こうした動きのきっかけはデフォルトのコンパイラとして採用しているGCCがそのライセンスをGPLv3に移行させたことにある。FreeBSDプロジェクトはベースシステムにGPLv3のコードを取り込まない方針を定めている。このため、移行後のGCCへアップグレードができずにいる。ベースシステムのGCCは「GCC 4.2.2 20070831 prerelease」のままで止まっており、別のコンパイラへの移行が求められている。 FreeBSDはアプライアンスや組み込みデバイスで採用されるケースが増えており、またそうしたプロダクトを製造しているベンダはGPLのコードがベースシステムに含まれていることを良としない傾向がある。GCCから別コンパイラへの移
LevelDB is a fast key-value storage library. Googleから新しいプロジェクトが公開された。高速なキーバリューデータベースライブラリ「LevelDB」だ。2条項のBSDライセンスのもとでオープンソースソフトウェアとして提供されている。 対象言語はC++。なるべくほかのライブラリやプラットフォームへの依存が少なくなるように設計および実装されており、アプリケーションへの組み込みやOSへの移植が簡単に実施できるという特徴がある。 LevelDBの提供する機能はキーから値への順序付きマッピングを提供するというもの。SQLに対応したリレーショナルデータベースのような機能は提供していない。割り切った機能に特化しており、基本的にPut(key,value)、Get(key)、Delete(key)で操作を実施する。Chromeに搭載されているIndexedD
In Visual Studio 2022 17.10 Preview 2, we’ve introduced some UX updates and usability improvements to the Connection Manager. With these updates we provide a more seamless experience when connecting to remote systems and/or debugging failed connections. Please install the latest Preview to try it out. Read on to learn what the Connection ...
みなさんいかがお過ごしでしょうか?前回は足し算しました。今回はループです。 足し算ではとにかくいっぱいPP_ADD_Iを並べましたが、もっとスタイリッシュに書きたいですね。書きましょう。 まずC/C++のループはこんな感じです: while (condition) { ... } forはwhileの便利記法なので、whileさえあればfor相当のものは作れます。逆も言えますが。conditionはループの判定式です。{ ... }は繰り返したい処理です。 conditionはただの変数に見えますが、別にこれはf(g(h(n)))とか、i < 3とかそういうのでもいいです。とにかく何か式です。 ちょっと困りました。whileは構文です。関数じゃありません。どうしましょう。こうしましょう。 while(p, f, v) = while'(p, f, while'(p, f,...while'
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く