タグ

C++に関するxiangzeのブックマーク (97)

  • extern "C"の意味

    extern "C"の意味について調べてみました。 1.はじめに CプログラムからC++の関数を起動することを確認するため、下記のサンプルを作りました。 foo.h class Foo { private: int number; public: Foo(int num); int print(void); }; void construct(); void foo_print(); void destruct(); foo.cpp #include "foo.h" #include <iostream> Foo::Foo(int num) { number = num; } int Foo::print(void) { std::cout << number << '\n'; } Foo *foo; void construct() { foo = new Foo(100) ; } vo

    extern "C"の意味
    xiangze
    xiangze 2023/07/23
  • C++ユーザーの為のリンクの話1 - Qiita

    C++と書きましたが C でも Fortran でもだいたい同じです。とりあえず gcc (g++) で Linux の話をします。目標としては次の二つです リンク時の undefined reference エラーとは何なのかを理解する(この記事) 実行時の cannot open libXXX.so エラーとは何なのかを理解する(次回) コンパイルとリンク C++ではプログラムを実行可能な形式にするまでにいくつかの形をとります ソースコード (*.cpp, *.cxx 等) オブジェクト (*.o) アーカイブ (*.a) 共有ライブラリ (*.so) 実行可能ファイル (a.out, これには普通拡張子はつけない) ソースコードから実行可能ファイルや共有ライブラリを作る操作を一般にコンパイルと呼びますが、特に複数のオブジェクトファイルを単一のアーカイブや共有ライブラリ、実行可能ファイ

    C++ユーザーの為のリンクの話1 - Qiita
  • Pythonが嫌いなのでC++版のPytorchで画像認識をやってみる 6日目 - Qiita

    #include <torch/torch.h> #include <iostream> class Net : torch::nn::Module { public: torch::nn::Conv2d conv1=nullptr; //謎の構文 torch::nn::MaxPool2d* pool; //ポインタで定義 Net(); ~Net(); }; Net::Net() { torch::nn::Module(); conv1 = torch::nn::Conv2d(1, 6, 5); //変数代入で初期化 pool = new torch::nn::MaxPool2d(torch::nn::MaxPool2dOptions({2, 2})); //newでメモリ確保 } Net::~Net() { //delete conv1; //変数なのでdelete命令を掛けるとエラー

    Pythonが嫌いなのでC++版のPytorchで画像認識をやってみる 6日目 - Qiita
  • noexcept - cpprefjp C++日本語リファレンス

    概要 C++11で導入されたnoexceptキーワードには、以下の2つの意味がある: ひとつは、throwキーワードによる例外仕様の代替。関数がどの例外を送出する可能性があるかを列挙するのではなく、例外を送出する可能性があるかないかのみを指定する。例外を送出する可能性がある関数にはnoexcept(false)を指定し、例外を送出する可能性がない関数にはnoexcept(true)もしくはnoexceptを指定する: class Integer { int value_ = 0; public: // getValue()メンバ関数は、例外を送出しない int getValue() const noexcept { return value_; } }; noexceptキーワードのもうひとつの意味は、式が例外を送出する可能性があるかどうかを判定する演算子である。noexcept(f(ar

  • PVS‑Studio | Posts: articles

    To get the licence for your open-source project, please fill out this form

    PVS‑Studio | Posts: articles
  • std::vector&lt;T&gt; で MATLAB や numpy のように配列計算する

    Abstract C++ において,クラスのコンストラクタ中でメモリを確保し,ディストラクタ中でメモリを解放することで,メモリ寿命をクラス寿命としてスコープにより制御すること (RAII※) は一般的である.C++ において,単なる配列を RAII に従い実装する場合,新たなクラスを定義することはせず,std::array<T> や std::vector<T> などの標準実装のコンテナ型を用いることが一般的である.これらのコンテナ型は,単なる配列としてだけでなく,数値計算やデータ解析における配列としても多用される.このとき「要素の追加」や「配列全体への演算」といった操作が頻繁に発生する.しかしながら,現状では std::vector<T> に演算子が定義されておらず,MATLAB における a=[1, 2, 3]; a*=4 や numpy における a=np.asarray([1,2,

  • 最高速のfizzbuzzを実装する話

    この前、Twitterで誰かが「コンパイラ言語でFizzbuzz書くなら、コンパイル時に全ての演算を済ませ、実行コストはI/O命令1個になるように最適化しないと」という話をしていた。いいこと言うな、と思ってスルーしていたのだが、体調不良で頭だけ動いている状態だったのでC++11でトライしてみることに。 案ずるより産むが易しというもので、割と簡単に綺麗に書けた。こんな感じ。 char配列を可変長のテンプレート引数として結合していって、文字列定数を生成するというテクニックは実際に使い所があるかもと思った。最近C++書いてないけど。 #include <cstdio> template <typename LHS, int N> struct numstr { template <char... Args> struct append { typedef typename numstr<LHS,

  • 英語論文執筆のために arXiv からの例文検索サービスを作った話

    arXiv の論文から例文を検索する Hyper Collocation というサービスを公開しました. 以下はあまり整理されていない製作の記録です. 英語論文執筆用の例文検索サービス 英語での論文執筆の際に,専門用語を含む例文や言い回しのパターンを知りたいことが多々あります.有用なサービスとしては ライフサイエンス辞書のコーパス検索 Springer Exemplar (2018/2/1頃に終了) がありますが, データがライフサイエンス系の論文に限られている(ライフサイエンス辞書) ソートの基準が頻度順ではないため典型的な例文が上位にこない ストップワードに近い頻出語を検索した際の 検索が重い(Springer Exemplar) 表示可能な検索結果が偏る(ライフサイエンス辞書) という不満点があったので,並行して個人的な資料から検索を行うプログラムを作って使っていました. しかし,個

    英語論文執筆のために arXiv からの例文検索サービスを作った話
  • C++14 - cpprefjp C++日本語リファレンス

    概要 C++14とは、2014年12月に改訂され、ISO/IEC 14882:2014で標準規格化されたC++バージョンの通称である。 前バージョンであるC++11からマイナーバージョンアップされ、小さな機能拡張が行われた。 このバージョンは、策定中はC++1yと呼ばれていた。前バージョンであるC++11が策定中、C++0xと呼ばれていたことから、「xの次」という意味で「y」が使われていた。 言語機能 言語機能 説明

    xiangze
    xiangze 2017/11/26
  • GCCのバグ?未定義動作?g++とclang++で違う結果になるコード - naoya_t@hatenablog

    こないだAtCoderの過去問を解いてて ローカルでは正解が出ているのにサーバ上でREが出まくってはまったのでメモ。 再現できる形で変形&単純化を繰り返した結果がこんな感じ #include <vector> #include <cstdio> std::vector<int> a, b; int f() { a.push_back(-1); b.push_back(-1); return (int)a.size(); } int main() { int first = f(); printf("a[0]=%d, b[0]=%d\n", a[0], b[0]); a[0] = f(); printf("a[0]=%d, b[0]=%d\n", a[0], b[0]); return 0; }・グローバルに vector<int> a, b がある。それぞれの中身は最初は空(だと思う)。

    GCCのバグ?未定義動作?g++とclang++で違う結果になるコード - naoya_t@hatenablog
    xiangze
    xiangze 2017/11/13
  • C++技法:部分特殊化された非型実引数でも、部分特殊化のテンプレート仮引数を使った演算をする - Fixstars Tech Blog /proc/cpuinfo

    このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 今日も楽しくC++しているみなさま、こんにちは!C++勉強会を開催したり、wandboxのスポンサーになったり、もちろん業務でも使ったりと、日頃からC++に触れることの多いフィックスターズですが、今日はそんなC++の高速化(?)技法を一つ紹介したいと思います。それは記事題の通り部分特殊化された非型引数においても、部分特殊化のテンプレート引数を使った演算できるようにする方法です。 TL;DR:非型引数をラップする型を使えば良い 問題の要約は以下の通りです(wandboxでの実行結果)。 // こんなテンプレートがあった時に template<int V1, int V2> struct Foo; // 部分特殊化したい場合、 template<int V> // 部分特殊化のテンプレート

    C++技法:部分特殊化された非型実引数でも、部分特殊化のテンプレート仮引数を使った演算をする - Fixstars Tech Blog /proc/cpuinfo
    xiangze
    xiangze 2017/10/22
  • C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう

    Results of the Grand C++ Error Explosion Competition 少し前に、C++のコンパイルエラーの長さを競うコンテストが開催されていました。 受賞のカテゴリは2つあり、ひとつめは最小コードで最大のコンパイルエラーを出した人、もうひとつは芸術的な評価による受賞です。 最小コードで最大のコンパイルエラー この部門で優勝したのはEd Hanwayさんという方で、ソースコード量に対して59億倍のコンパイルエラーメッセージを出力したそうです。 それには、自身を2回インクルードするという手法が使われていたそうです。 #include ".//.//.//.//jeh.cpp" #include "jeh.cpp" 次点として、インクルードに後方参照を使用した、7億9千万倍のコンパイルエラーを出力するコード: #include "set>.cpp" #incl

    C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう
  • pybind11を使ってPythonからC++コードを実行する方法 - MyEnigma

    新・明解C言語 入門編 (明解シリーズ)posted with カエレバ柴田 望洋 SBクリエイティブ 2014-08-09 Amazonで探す楽天市場で探すYahooショッピングで探す 目次 目次 はじめに pybind11とは? シンプルなサンプルコードの実行方法 1. pybind11をDL 2. c++のコードを書く 3. pybind11のバインドc++コードを書く。 4. C++コードをコンパイルする。 Macの場合 ubuntuの場合 5. pythonコードで読み込ませる デフォルト引数 C++コードの変数をpython側で利用する C++クラスのバインディング 継承 関数のオーバーロード Enum STLのコンテナのやり取り pybind11がサポートしているコンパイラ サンプルコード より詳しいPythonとCコードの連携方法を学びたい人は 参考資料 MyEnigma

    pybind11を使ってPythonからC++コードを実行する方法 - MyEnigma
  • Numpy, Scipy, MATLABの便利関数を実装したC++の行列演算ライブラリnumpycpp - MyEnigma

    自動車業界MBDエンジニアのためのSimulink入門-4週間で学ぶSimulink実践トレーニング- (MBD Lab Series)posted with カエレバ久保孝行 TechShare 2012-11-19 Amazonで探す楽天市場で探すYahooショッピングで探す 目次 目次 はじめに 関数(APIs) reshape isdiag vstack hstack kron block_diag 参考資料 MyEnigma Supporters はじめに PythonのNumpyやScipy、 またはMATLABなどを使って、 プロトタイプを作成し、 そのシステムをC++に移植しようとすると、 C++の行列演算ライブラリEigenの関数(API)の少なさに 悲しくなることがあります。(NumpyやMATLABがすごいだけなのですが...) Eigen そこで、NumpyやSci

    Numpy, Scipy, MATLABの便利関数を実装したC++の行列演算ライブラリnumpycpp - MyEnigma
  • C++のコードから簡単にmatplotlibを使ってグラフを作成する方法 - MyEnigma

    Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析機械学習posted with カエレバJake VanderPlas オライリージャパン 2018-05-26 Amazonで探す楽天市場で探すYahooショッピングで探す 目次 目次 はじめに C++からmatplotlibのグラフ描画機能を使うヘッダライブラリ: matplotlib-cpp コンパイル方法 Makefile CMake matplotlib-cppの使い方 標準的なPlot関数の使い方 複数のプロットをする グラフの凡例の表示 グラフの表示範囲を設定する 軸のタイトルやグラフの名前を設定する グラフを保存する アニメーションを表示する方法 最後に 参考資料 MyEnigma Supporters はじめに C++で複

    C++のコードから簡単にmatplotlibを使ってグラフを作成する方法 - MyEnigma
    xiangze
    xiangze 2016/12/16
  • マルチスレッドに関するTensorFlowの内部構造について - Qiita

    TensorFlowのMNIST Tutorialを初めて動かした時にPCファンがごーっと回りだし、おやっとCPU利用率を確認してみたらほぼほぼ100%に張り付いていたのを見たのが、題について調べようと思ったきっかけです。ユーザー側からのコンフィグなしにどのようにマルチスレッドをTensorFlowで実現しているのか調べてみました。 環境 以下の通り仮想マシン上でTensorFlowを動かしています。 - CPU: Intel Core i5-4570, 3.2GHz, 4 cores, Haswell (ark.intel.com) - Ubuntu 16.04 on VMware Workstation 12 - 4仮想CPU、8GBメモリ - Python 3.5.2 - GNU G++ 5.4.0 - master branch of tensorflow github $ gi

    マルチスレッドに関するTensorFlowの内部構造について - Qiita
  • 高速なハッシュテーブルを設計する | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) はじめに 稿では、高速で汎用的なハッシュテーブルを作るために行う、設計についての多くの意思決定事項を紹介します。最終的に、私の emilib::HashSet とC++11の std::unordered_set の間のベンチマークが出来上がりました。もし、ハッシュテーブルに興味があって、自分で設計したいなら(どのプログラミング言語かに関わらず)、稿がヒントになるかもしれません。 ハッシュテーブル は、素晴らしい発明です。 ならし計算量O(1) ( O(√N)時間 )で、挿入、削除、検索を行うことができます。ならし計算量とは、ハッシュテーブルの計算に平均でO(1)の計算量がかかることを意味しますが、時々、これよりも多くの時間がかかる場合があります。具体的には、ハッシュテーブルに空きがない場合で、挿入の

    高速なハッシュテーブルを設計する | POSTD
  • dlibと呼ばれる画像処理ライブラリを使ってみた - のんびりしているエンジニアの日記

    皆さんこんにちは お元気ですか。私は元気です。 日ではあまり見られないdlibと呼ばれるライブラリの画像処理ライブラリを 使ってみたいと思います。 dlibについて dlibとは 公式サイト:dlib C++ Library Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. It is used in both industry and academia in a wide range of domains including robotics, embedded devices, mobile phones, and large high perfo

    dlibと呼ばれる画像処理ライブラリを使ってみた - のんびりしているエンジニアの日記
  • OpenEXRのコンパイル方法についてのメモ

    @memoblog からのツイート 2021年12月(1) 2021年10月(1) 2021年08月(1) 2021年07月(1) 2021年06月(1) 2021年04月(1) 2021年03月(1) 2021年02月(1) 2021年01月(3) 2020年11月(1) 2020年10月(1) 2020年08月(1) 2020年06月(2) 2020年05月(1) 2020年04月(5) 2020年02月(5) 2020年01月(1) 2019年12月(1) 2019年11月(1) 2019年10月(1) 2019年09月(1) 2019年07月(1) 2019年06月(1) 2019年05月(3) 2019年04月(2) 2019年03月(1) 2019年02月(1) 2019年01月(1) 2018年12月(2) 2018年11月(1) 2018年10月(3) 2018年09月(1

    OpenEXRのコンパイル方法についてのメモ
  • Rcpp で疎行列をデータフレームに変換する - nonsense days

    しばらく体調を崩してしまっていたため、すっかりご無沙してしまいました。ようやく回復してきましたので活動再開しようと思います。 というわけで、だいぶ間があいてしまいましたが、前回の続きということで、Matrixパッケージで作成した疎行列をデータフレームに変換する処理を紹介します。(正直、必要性はあまりないとは思いますが、Rcpp の使い方を示す例としては悪くないと思います。あと、疎行列の実装方法の一つである圧縮列格納方式については、説明する前に力尽きました。) ちなみに、R の場合には以下のようにします。 # 疎行列の作成 library(Matrix) sm <- Matrix(sample(c(0,1), size = 25, replace = TRUE) , nrow = 5 , sparse = TRUE) # データフレームへの変換 df <- as.data.frame(as.

    Rcpp で疎行列をデータフレームに変換する - nonsense days