タグ

C++に関するSnowCaitのブックマーク (38)

  • イマドキの C++erが覚えておくべき便利なWebサービス7選

    こんにちは、yoshiです。 今回は直接的な技術の話ではありませんが、C++の情報を集めるにあたって筆者が参考にしているWebサービスを紹介しようと思います。 筆者の独断により重要だと思う情報から並べていきますが、どのサービスも異なる方向に特化しているので優劣を付けられるわけではありません。何を重要視するかで変わると思います。 ⚓1. Wandbox wandbox.orgより どんなプログラム言語でも、まずは実行してみるということが一番大事だと筆者は考えています。という訳でまず紹介するのは、多様な言語に対応したオンラインコンパイラです。 C、C++の他にも、C#、JavaJavaScriptGoRustなど様々な言語のコードをサンドボックス環境で実行してくれます。 特筆すべきは、過去の複数のバージョンや開発中バージョンまで使えるようになっていることで、これにより特定のバージョンで発

    イマドキの C++erが覚えておくべき便利なWebサービス7選
    SnowCait
    SnowCait 2018/10/31
  • C++のパラメータパック基礎&パック展開テクニック - Qiita

    C++には可変長テンプレートという機能があります。 ... を用いて任意長のパラメータを引数にできる機能です。 以下は、可変長テンプレートを使った関数テンプレートの例です。 このときの Args を テンプレートパラメータパック といい、 args を 関数パラメータパック といいます。 以下ではこの2つを特に区別する必要がない文脈では単にパラメータパックと呼びます。 この関数に引数を渡すと、全ての引数から型推論が行われます。 Args は推論された型が格納されたパラメータパックになります。 args は引数が格納されたパラメータパックになります。

    C++のパラメータパック基礎&パック展開テクニック - Qiita
    SnowCait
    SnowCait 2017/03/17
  • スレッドセーフという幻想と現実 - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2013の15日目にエントリしています。 内容はC++標準ライブラリとスレッドセーフに関する解説になります。 flickr / rennasverden もくじ What's スレッドセーフ? スレッドセーフという幻想 基型とデータ競合 C++標準ライブラリとデータ競合 C++標準ライブラリ:シーケンスコンテナ編 C++標準ライブラリ:連想コンテナ編 スレッドセーフ RELOADED 基的なスレッドセーフ保証 std::shared_ptr<T> std::rand() std::cout (文のみ約9000字) はじめに マルチスレッド対応の点では他言語に遅れを取っていたプログラミング言語C++ですが、C++11ではようやく標準ライブラリにスレッドサポートが追加されました。C++11スレッドサポートではスレッドクラスstd::thr

    スレッドセーフという幻想と現実 - yohhoyの日記(別館)
  • 「-j」オプションと「ccache」でコンパイル時間を400%高速化する方法

    もはや様式美。「コンパイルあるある」 コンパイル待ちの時間は手持ち無沙汰なものです。仕方がないのでコンパイルしているソフトの公式サイトや参考書を読んで時間を潰していると、実は間違ったオプションでコンパイルしていることが判明。 再びコンパイルをやり直すはめに…。 そんな不毛な時間を短縮する方法を紹介します。 いくらパソコンが高速になってきたと言っても、Linux kernelやMySQLなど、サイズの大きなものをコンパイルするには時間がかかります。 そうしたコンパイルにかかる時間を短縮してくれる便利なオプションとソフトを紹介します。 makeコマンドの「-j」オプションを利用して高速化する こちらはmakeコマンドのオプションです。 同時に実行できるジョブの数(並行処理の数)を指定します。「-j2」とすれば2つ、「-j3」とすれば3つ同時に作業してくれます。 また数字を付けずに「-j」とする

    「-j」オプションと「ccache」でコンパイル時間を400%高速化する方法
  • UNIX上でのC++ソフトウェア設計の定石 (6) - memologue

    鉄則6: マルチスレッドプログラミングの「常識」を守ろう POSIXの標準関数のうち、非スレッドセーフであるものの一覧を把握し、使わないようにせよ 自作の関数はスレッドセーフにせよ 共有変数はロックして参照・更新せよ C++を使っているなら、関数を同期化する方法に注意せよ 説明: (1) POSIXの標準関数のうち、非スレッドセーフであるものの一覧を把握し、使わないようにせよ もしPOSIXプラットフォームでマルチスレッドのプログラミングを行うなら、いくらかの最低限の知識、つまり「常識」を知り、厳守する気持ちで望みましょう。 ...まずは、「スレッドセーフ」の意味を理解しましょう。スレッドセーフな関数とは、「複数のスレッドが同時に呼び出しても問題ない関数のこと」です。こういう関数は次のどちらかの性質を満たしています。 局所的静的変数(関数内のstatic変数)や非局所的静的変数(大域変数)

    UNIX上でのC++ソフトウェア設計の定石 (6) - memologue
  • gcc (g++) のオプション見直し中 - 好き勝手に・げーあにん?

    プロジェクトの谷間で時間に余裕があるので、make ファイルを1から書き直し中。make は捨てて、rake に乗り換えてみた。‥‥という話しは、置いといて、gcc のオプションを見直してて思ったことを垂れ流し。 gcc のオプションはFreeBSD 日語マニュアル検索で見てます。英語の man gcc とか見てると泣きそうになるから(ダメプログラマー)。 -Wall をつけない場合ってどんな時? ちょっと前に、デストラクタに virtual をつけるつけないかの話しが一部で盛り上がっていた(?)気がしたけど、g++ -Wall とかしてたら、警告で教えてくれるよね。 class Super { public: ~Super() {} // こいつを virtual にすれば警告でない virtual int getA() const; }; class Sub : public Sup

    gcc (g++) のオプション見直し中 - 好き勝手に・げーあにん?
  • gcc+gdbによるプログラムのデバッグ 第1回 ステップ実行、変数の操作、ブレークポイント

    しかし、ブレークポイントという機能はデバッガの手助けなしでは実現できません。 ブレークポイントとはプログラムの強制一時停止を行うポイントで、実行中のプログラムがブレークポイントに遭遇するとプログラムは一時停止され、デバッガによるプログラムへの介入を行えるようになります。 ブレークポイントは次のような場所に設定できます。 指定した行番号のプログラムを実行しようとする瞬間 関数を呼び出した瞬間 その他、C++などでは「例外が発生した瞬間」などにもブレークポイントを設定することができます。 行番号ブレーク ブレークポイントとしてよく使用されるのは、「プログラムの特定の位置」です。 例として、bubblesort.cプログラムのsort関数内で、隣り合う二つの要素を比較している箇所にブレークポイントを設定してみます。 25|/* bubble sort */ 26|void sort(int *a

  • GDBでSegmentation Faultの原因を突き止める - /* Grid Thinking */

    Linuxのプログラムをデバッグするとき、一番困ることはあの有名の「Segmentation Fault」ですね。 プログラムが膨大でマルチプロセス等を使っていたら、どこで問題を起こしているのかすらわからないです。 編はLinuxのCore Dump機能で問題発生行を特定する方法を紹介します。 まず、前提としてはSegmentation Faultは再現できること。(当たり前ですよね) 下記のプログラムを例とします。#include<stdio.h> #include<string.h> #define DATA "TEST" char mngfile[2][50]; int main() { memset( mngfile, '\0', sizeof(mngfile) ); GetMngFile(mngfile); return 0; } int GetMngFile( mngfile

    GDBでSegmentation Faultの原因を突き止める - /* Grid Thinking */
  • メモリの情報取得 | LinuxC

    システムのメモリの情報取得 まず、システムが知っているメモリ情報を取得しましょう。 例えば、物理メモリ量やSWAPのメモリ量等です。時々ですが、こういう情報が欲しい場合がありますね。 sysinfo(2)のmanページを見ればどういった情報が取得できるかが分かります。 Linux 2.3.23 (i386)、2.3.48 (全てのアーキテクチャ) からは構造体は struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available me

    メモリの情報取得 | LinuxC
  • C++11のラムダ関数の簡単なまとめ - minus9d's diary

    C++11で導入されたラムダ関数を使えるようになるための簡単な覚書です。 ラムダ関数とは? 名前のない関数のことです。無名関数と呼ばれることもあります。 わざわざ関数を定義するほどのこともない、ちょっとした処理を行いたいときに使われることが多いです。あまりラムダ関数で複雑な処理をするとコードが読みにくくなるので注意。(関数に名前がついていないので処理の内容を予想できなくなるため) 最初の例 まず最初に、「整数を一つとり、その二乗を返すラムダ関数」から。このラムダ関数は以下のように書けます。 auto f1 = [](int x) { return x * x; }; このラムダ関数を呼び出してみます。 // ラムダ関数を呼び出す。関数ポインタみたいに使える std::cout << "1: " << f1(1) << std::endl; std::cout << "3: " << f1(

    C++11のラムダ関数の簡単なまとめ - minus9d's diary
  • Visual StudioでLinux向けにMakefileプロジェクトを作ってリモートビルドする – Bakulog

    初歩的なとこで突っかかったのでメモ程度に。 記事ではVisual StudioのプラグインであるVisual C++ for Linux Developmentに最近追加された機能を紹介します。 まずVisual C++ for Linux Developmentとは何かという話ですが、これは名前の通りVisual StudioでLinux向け開発をサポートするプラグインです。 プラグイン自体は以前から公開されていて、クロスコンパイルに関する方法の解説記事が上がっていたりします。 Visual C++ for linux Development を軽く使ってみた Visual C++ for Linux Developmentつかってみようとしたらハマったけど動いた さて。ここからが題ですが、2016年8月19日に同プラグインではMakefileプロジェクトが新たにサポートされました。

    Visual StudioでLinux向けにMakefileプロジェクトを作ってリモートビルドする – Bakulog
  • 株式会社エス・スリー・フォー » ICU 2.4 の正規表現

  • ICU(C++)を使って Unicode 正規化 - やた@はてな日記

    文字列を処理するのに Python はとても便利ですが,速度が気になる状況では,やはり C/C++ を使いたいところです.ということで,Unicode 正規化(http://homepage1.nifty.com/nomenclator/unicode/normalization.htm)のために ICU(ICU - International Components for Unicode)を試してみました. インストール Synaptic パッケージ・マネージャから libicu-dev をインストールできました. Unicode 正規化のテスト // g++ には `icu-config --cppflags --ldflags` を渡します. #include <unicode/normlzr.h> #include <iostream> int main() { // utf-8

    ICU(C++)を使って Unicode 正規化 - やた@はてな日記
  • ICUを使う | Netsphere Laboratories

    IBMによるUnicodeライブラリ、ICUを使う。 2005.4.29新規公開。2000.6.14の日記に加筆、修正。 2005.5.15 更新。 インストール Unicodeを扱うためのライブラリはいくつかあるが、IBMによるUnicodeライブラリICU "International Components for Unicode" を試してみる。 ICUはC++版とjava版がある。2011年1月現在の最新版はバージョン4.6。CLDR (Unicode Common Locale Date Repository) 1.9, Unicode 6.0に対応している。 次のサイトから入手できる。 ICU - International Components for Unicode あるいは、Fedora Linuxには、パッケージが含まれている (rpm名=libicu-devel)。

  • 一週間で身につくC++言語の基本|第2日目:クラス間の相互参照

    クラスの相互参照 C++のクラスの相互参照 C言語のケースと同様、C++のプログラムでも、ある程度複雑になると、多数のクラスが存在し、互いに参照するようになります。その参照関係は、どちらか一方が他方を一方的に利用・参照する関係ばかりとは限りません。場合によっては、複数のクラスが互いに参照しあうようなケースも考えられます。ここでは、そういったケースのソースコードの作成方法について説明します。 #includeの問題点 C++である程度実用的なプログラムを作成しようとする場合、避けて通れないのが、このクラスの相互参照です。あるクラスAとクラスBがあり、互いに参照する必要があるとします。このとき、通常であれば、以下のようにヘッダーファイルを定義するでしょう。 相互参照の例①(一つ目のクラス):A.h

    SnowCait
    SnowCait 2016/09/16
  • Boost17 cpplinq

    3. 私について Twitter : @mikiemon_h 普通の人。 ・公での発表的なものは、これが初。 ・仕事は、スマホ向けのゲームアプリ開発。 ・最近はもっぱら Unity で C# な感じ。 ・ここ数年、まともに C++ を書いてない…。 なんか、ごめんなさい…。 5. LINQ ってなんだ? 統合言語クエリ (LINQ, Language INtegrated Query, リンクと発音する)とは、.NET Framework 3.5において、様々な種類のデータ集 合に対して標準化された方法でデータを問い合 わせる(クエリ)ことを可能にするために、言 語に統合された機能のことである。 - Wikipedia 統合言語クエリ より引用 - (URL http://goo.gl/3ITZ5) 7. LINQ for C# の例 var customers = new [] { ne

    Boost17 cpplinq
  • ICU4C C++ ローマ字→カタカナ、ひらがな変換 - janeyの日記

    IBMのICU4Cを使って ローマ字→カタカナ ローマ字→ひらがな ひらがな→カタカナ カタカナ→ひらがな 全角→半角 半角→全角 変換するプログラムを作ってみた。 例えば… ↓↓↓ aiueo → アイウエオ aiueo → あいうえお ひらがな → ヒラガナ カタカナ → かたかな ハンカク → ハンカク zenkaku → zenkaku #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "unicode/translit.h" using namespace std; //変換関数 char* latin2katakana(UnicodeString text); char* latin2hiragana(UnicodeString text); char*

    ICU4C C++ ローマ字→カタカナ、ひらがな変換 - janeyの日記
  • RapidJSONのメモ - Qiita

    公式サイトにちゃんとしたドキュメントがあるが、英語がつらいのでメモをとる。 特徴 速度へのこだわり ヘッダだけなので、コピッペするだけで使える Visual Studio, gcc, clang 対応 STLなどに依存していない 例外処理なし。善し悪しは別として UTF-8(ASCII)、UTF-16、UTF-32対応 簡単な例 #include "rapidjson/document.h" static const char* s_json = R"( { "string" : "foo", "number" : 123, "array" : [ 0, 1, 2, 3 ], "object" : { "v0" : "bar", "v1" : 456, "v2" : 0.123 } } )"; using namespace rapidjson; void test_example() {

    RapidJSONのメモ - Qiita
  • Free Dynamic DNS(DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, VPS | MyDNS.JP

    pokotsun.mydns.jp is not accessible... Sorry. I do not know why this site is not working. If you know Administrator of this site, please contact directly. You may be able to see it in Google cache. For administrator ... MyDNS.JP did not received IP address from you over One week. Please check your notify system. If you restart notification of IP address, MyDNS.JP will apply your IP address to DNS

  • マルチバイト文字列とワイド文字列 - mkubara.com

    概要 VisualStudio2005になって、今まで書いていた文字列処理関係のコードに対してコンパイルエラーや警告が表示されるようになった方も多いと思います。VisualStudio2005では使用する文字コードが変更となり、従来のマルチバイト文字列(日ではShift-JIS)から、世界標準のワイド文字列(Unicode, UTF-16)へ移ったためです。 このように文字コードはプログラムにおいて重要な位置を占めるものですが、その実態や移行の手法は意外と情報の少ないものでした。今回はこの辺りを記述します。 マルチバイト文字列とワイド文字列 char型とwchar_t型 日Windows上で現在我々の利用する文字コードであるShift-JISは、主に英字を1バイト、日語文字を2バイトで表現するため、マルチバイト文字列と呼ばれます。マルチバイト文字列は1文字が何バイトかを文字ごとに計