約 7,927 件
https://w.atwiki.jp/bokuyo/pages/118.html
structハック(struct hack) - Flexible array member "hack"という単語に弱いあなたへ。 ここのページ書き加えたい。 C++03 でstruxt ハックを使う場面が思い浮かばない。アロケータを自前で作るときとかに使いそう? struct hack "Flexible array member(柔軟な配列のメンバ)"と呼ばれることが公の場では多いみたい。 でも、ちょっと長いから"struct hack"の愛称で親しまれてる。以降の文章は"structハック"と書こうかな。 structハックって? 通常、要素数を定義しない配列の宣言は不完全な宣言とみなされコンパイルエラーとなります。 int eureka[7];//おっけー int renton[];//コンパイルエラー しかし、構造体の宣言の最後の行に要素数を定義しない配列を宣言することができます。 struct EurekaSeven { int eureka[7]; int renton[];//定義できちゃう! } これがstructハックです。 ここでの「renton」をflexible array member(柔軟な配列のメンバ)と言います。 構造体だけでなく、共用体やclassでも同様のことができます。 サイズと確保のされ方 std cout sizeof(EurekaSeven) std endl; // "28"と表示されるよん EurekaSeven構造体のサイズは"28"Byte。int型は"4"Byteなので、「4 Byte * eureka[7] = 28 Byte」。 つまり、コンパイラは「int renton[];」をサイズ0の配列とみなしているのです。 EurekaSeven es; for(int i=0; i 7; ++i){ std cout es.eureka+i std endl; } std cout es.renton std endl; 上のプログラムを行うと、それぞれどこに確保されているかアドレスを見ることができます。 //出力結果 002FFB94//es.eureka[0]; 002FFB98//es.eureka[1]; 002FFB9C//es.eureka[2]; 002FFBA0//es.eureka[3]; 002FFBA4//es.eureka[4]; 002FFBA8//es.eureka[5]; 002FFBAC//es.eureka[6]; 002FFBB0//es.renton[]; こんなのどこで使うの? int const elements= 156; void *esMemoryPool= std malloc( sizeof(struct EurekaSeven) + sizeof(int[elements]) ); struct EurekaSeven *es= new(esMemoryPool) EurekaSeven; このようにして使うことが多いみたいです。 何をしているのかというと、次と同じようなことをしています。 struct EurekaSeven { int eureka[7]; int renton[elements]; }; int renton[]を使うことで、renton[0]~renton[155]へ簡単にアクセスすることができるようになります。 es- renton[155] = 777; std cout *((es- renton)+155) std endl; //"777"が表示される。 templateを使って同様のことができます。 template unsigned int N struct EurekaSeven { int eureka[7]; int renton[T]; }; ただし、templateを使って要素数を定義する場合、要素数の違いで型が変わってしまいます。 int const elements= 156; EurekaSeven elements *es = new EurekaSeven elements ; delete (es); EurekaSeven 156 型とEurekaSeven 256 型は違う型なので代入したりできません。 使い方 #include new #include iostream struct EurekaSeven { int eureka[7]; int renton[]; }; int main() { int const elements= 156; void *esMemoryPool= std malloc( sizeof(struct EurekaSeven) + sizeof(int[elements]) ); struct EurekaSeven *es= new(esMemoryPool) EurekaSeven; es- renton[155]= 777; std cout *((es- renton)+155) std endl; delete (es, esMemoryPool); return 0; } placement newしているので、 new をincludeしてあげてください。 structハックをVisual C++2010で使うと以下のような警告がでます。 warning C4200 非標準の拡張機能が使用されています 構造体または共用体中にサイズが 0 の配列があります。 UDT にサイズが 0 の配列が含まれているときに、copy-ctor または copy-assignment オペレーターを生成することはできません。 参考文献 Sun Studio 12 C ユーザーズガイド - D.1.8 柔軟な配列のメンバー http //www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf(p.103 - §6.7.2.1 17のEXAMPLE)
https://w.atwiki.jp/sevenlives/pages/594.html
コレクション・フレームワーク 読み:これくしょんふれーむわーく 英語:Collection Framework 別名:リスト 意味: コレクション・フレームワークとはオブジェクトの集合を柔軟的に扱う仕組みのこと。 配列では1度定義した大きさを変更できないなどの不便があるためオブジェクトを柔軟に扱うために作られました。 VectorクラスやHashTableクラスなどのスレッドセーフなクラスが初期に存在していましたが負荷が大きいため現在はスレッドセーフではない処理の速い柔軟なコレクション・フレームワークを使うのが主流です。 配列とコレクションフレームワークの特徴。 配列 コレクション 型 参照型 参照型(utilパケージのオブジェクト) 要素数 不変(最初に定義された数) 可変(あとから追加、削除可能) 格納値 決められた同じ型のみ java.lang.Object型であるなら自由 他 基本データ型を格納できない 2010年10月27日 コレクション? JCF? キュー? スタック? マップ? ハッシュ・テーブル イテレータ? スレッド・セーフ? 同期? java.utilCollection?List? Set? Map? [Java[]]
https://w.atwiki.jp/kiuu/pages/102.html
無限ループでCPU高負荷 ページ bugtrack 投稿者 ばびぶべぼん 優先順位 緊急 状態 完了 カテゴリー バグ 投稿日 2009/11/02 (月) 15 22 23 バージョン 0.11β , 0.11 , 0.12テスト版 メッセージ 起動するとCPUが高負荷になります。 (ソースは、なでしこプログラム板のを拝見しています) 原因はステータスバーの時刻表示を更新する処理のようです。 「オンの間」のループですが、waitを入れていないため発生します。 「秒待つ」を入れるか、タイマー部品を使った方が良いと思います。 もし、よかったら開発の方お手伝いしましょうか? 詳細情報 発生するバージョンはv0.11β以降で発生。0.10a以前ではステータスバー時計表示が無いため発生しない。 解決策 問題個所↓ オンの間 下バーは今。 今を「 」で区切って時間配列に代入。 時=INT(時間配列¥0) 分=INT(時間配列¥1) 秒=INT(時間配列¥2) 続ける。 改良案↓ オンの間 下バーは今。 1秒待つ。 続ける。 こうすると1秒間隔で更新することになり、負荷が減る。 問題点:最大1秒の誤差が生じる。(許容範囲と思いますが…) あと、時間配列に代入するところですが利用している所がないので不要では? 改良案2↓ 時計更新とはタイマー その間隔は1 その時満ちた時は〜下バーは今 その開始 こちらはタイマー部品を使ってます。 プログラムの都合上、こちらの方が良いと思われます。 これも1秒間隔ですので誤差が最大1秒生じます。 どうしても正確さを求めるのであれば、間隔の値を小さくします。 でも、あまりにも小さすぎると負荷が大きくなりますので... わかりましたまっててください -- k.k 上のコメントに追記 開発を手伝ってもらってもいいですが、なでしこページにあるソースは古い(今はv0.12テスト版)ので個人ページの方にメールアドレスを書いていただければ幸いです(ソースを添付するので) -- k.k 了解です。 -- ばびぶべぼん v0.12テスト版でも同じ現象を確認 -- ばびぶべぼん じゃあ古いv0.09以前はどうでしょうか -- k.k こちらの問題が解決しなかったら過去ログwikiにおきます -- k.k 確認してみます。 -- ばびぶべぼん v0.09b以前ではステータスバーに時計がないため発生しないですね。 -- ばびぶべぼん 詳細をまとめておきました。 -- ばびぶべぼん 改良案2を適用することにします -- k.k 分かりました。 -- ばびぶべぼん v0.12テスト版2にて修正されたことを確認しました。 -- ばびぶべぼん 名前 コメント
https://w.atwiki.jp/ranha-icfp/pages/12.html
Backgroundの訳はここですよ! 遠藤はふーん星の生き物で、つまり地球外生命体。 地球の環境は遠藤に宜しいとは言えない。 遠藤は運悪くなんか変なのから地球におっこちてしまった\(^o^)/ 遠藤と安心の宇宙船Arrowは落っこちた時に痛い目をみて、 さらに遠藤は追加ダメージまで食らって泣きっ面に蜂。 遠藤は今はヤバい状況で、この形のままで地球に存在出来ないしArrowも死んでまう。 Arrow(我々と連絡を取ったのは都合よくも船でしたよ!)によると、 遠藤を生き残らせる為に、地球向けにDNAを変更するしかないという事。 我々のお仕事は72時間以内に適切なDNA配列を見つけるのを手助けする事。 失敗したら遠藤は死にます。 ICFPに参加する様な変態ならきっとなんとかしてくれるよね! 我々のここまでの取り組みでふーん星人のDNA配列生成プロセスに関する 情報が分かっています。 このドキュメントの以下の文では、この配列生成に関するアルゴリズムについて述べています。
https://w.atwiki.jp/swfspec/pages/107.html
シェイプの概要 シェイプは次のような要素により合成されます。 キャラクタID (CharacterId) 16 ビットの一意な識別子で、ディクショナリ中のキャラクタを指します。 CharacterId は制御タグの PlaceObject を参照します。 キャラクタは再使用することができます。 他のキャラクタと合成することにより複雑なシェイプを作ることができます。 バウンディングボックス (Bounding box) シェイプを囲む矩形領域を指します。 塗りスタイルの配列 (Fill style array) シェイプで使われる、塗りのスタイルのリストを指します。 線スタイルの配列 (Line style array) シェイプで使われる、線のスタイルのリストを指します。 シェイプレコード配列 (Shape record array) シェイプレコードのリストを指します。 シェイプレコードは、直線または曲線、スタイルの変更、描画位置の移動を定義します。 (注) 線と塗りのスタイルは各シェイプにつき1度だけ定義され、 辺ごとに利用・再利用されます。 移動 前のページ シェイプ 次のページ シェイプのサンプル
https://w.atwiki.jp/funnyjs/pages/21.html
forEachの短縮形メソッドです。 但し、eachは、複数データを持つ循環可能な形式のものであれば、共通してeachを使うことができます。 特におすすめは、連想配列(Object)または、配列(Array)、一意のHTMLElementの配列のような形式(NodeList)で使うことを推奨します。 Usage1 ({ foo 0, bar 1 }) .each((v, k) = $b.in(k + + v).in($d.ship( br ))) .each((v, k) = console.log(k + + v)); Result 1 foo 0 bar 1 と表示します。 Usage 2 [ foo , bar ] .each((v, k) = $b.in(v).in($d.ship( br ))) .each((v, k) = console.log(v)); Result 2 foo bar と表示します。 Return this ポインタで指定されているオブジェクトを返答します。 メソッドチェインにご活用ください。
https://w.atwiki.jp/atachi/pages/76.html
型情報の取得 [#d47d1f87] 文字列で任意のクラスの型情報を取得 型情報の使い方 型情報を使ってインスタンスを作成 [#x27b8e68] 型情報からの配列型作成 [#b4058749] 配列を初期化 [#h93d524f] 型情報による操作 [#dbce2237] ジェネリクスとリフレクション 型情報の取得 System Typeクラス に型情報に関するアクセスができます。 Typeクラスの作成は次のように行います。 Type t = Type.GetType("MyClass"); // クラス名による取得 文字列で任意のクラスの型情報を取得 アプリケーションがアクセス可能な型情報の一覧を作成できるので、その中から取得したい型名を探し出す事で、 文字列から型情報を取得できる。 using System.Reflection; class ObjectUtil{ public static System.Type GetTypeFromName(string name) { foreach(System.Type type in GetCurrendDomainAssemblyTypes()) { if (String.Equals(type.FullName, name) || String.Equals(type.AssemblyQualifiedName, name)) return type; } } public static IList System.Type GetCurrendDomainAssemblyTypes() { Assembly[] assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); List System.Type types = new List System.Type (); foreach (System.Reflection.Assembly assembly in assemblies) { types.AddRange(assembly.GetTypes()); } return types; } } 上記のようなクラスを用意しておけば、完全なクラス名を与えることでそのクラスの型情報を取得できる。 Type type = GetTypeFromName("System.String"); 型情報の使い方 型情報を使ってインスタンスを作成 Activatorを使う方法が最も簡単。 ただし、対象のクラス宣言でデフォルトコンストラクタにアクセスできる場合に限られる。 引数を伴うコンストラクタを呼び出したりするには、コンストラクタ情報(ConstructorInfo)を取得して呼び出す必要がある。 System.Type type = typeof(String); object instance = Activator.CreateInstance(type); 型情報からの配列型作成 System.Type type = typeof(String); object instance = Activator.CreateInstance(type); このように作り出した場合のinstance変数はString型であることが型推論によりわかるため、問題はありません。 しかし、型情報から動的に配列型を作成するには、工夫が必要で必ず配列のサイズをコンストラクタを使って指定します。 System.Type type = typeof(String); System.Type typeStrings = type.MakeArrayType(); // String[]のような型。 // 配列型をインスタンス化 // - コンストラクタを取得する ConstructorInfo[] Constructors = t.GetConstructors(); // - コンストラクタをInvokeする。 // パラメータは1つで、作成したい配列のサイズが入る。 var instance = Constructors[0].Invoke(new object[]{1}); // "new String[1]" と同じ 配列を初期化 上記のように動的に作成した配列型に初期値を与えることはできません。 よって、作成したインスタンスにArray.Copyを使って要素をコピーします。 Array.Copy(new String[]{"埼玉"}, (System.Array)instance, 1); foreach(object element in (System.Array)instance) { System.Console.WriteLine(element.ToString()); // echo "埼玉" } 型情報による操作 Type t = Type.GetType("MyClass"); // クラス名による取得 // 型情報からインスタンスの生成 MyClass obj = Activator.CreateInstance(t); t.GetField("width").SetValue(obj, 19); // objインスタンスのwidthフィールドへ値を設定 int width = (int)t.GetField("width").GetValue(obj); // objインスタンスのwidthフィールドの取得 ジェネリクスとリフレクション ジェネリックの型情報をリフレクションで取得します。 class Program { static void Main(string[] args) { Collection Student students = new Collection Student (); Type clazz = students.GetType(); Console.WriteLine("ジェネリクスであるか " + clazz.IsGenericType); Type genClazz = clazz.GetGenericArguments()[0]; Console.WriteLine("ジェネリック型 " + genClazz.Name); } } class Student { public string name; }
https://w.atwiki.jp/isoroku_be/pages/52.html
情報 作者名:五十六 引用元:なでしこプログラム掲示板「絶対パスファイル列挙」 概要 ファイル/フォルダ列挙の結果を絶対パスで返します。 解説 引数 S:ファイル/フォルダ列挙したいフォルダの絶対パス 返り値 絶対パス(配列) サンプルプログラム なし //本体 ●絶対パスファイル列挙({文字列=?}Sの|Sを|Sで) M=Sからファイル名抽出。S=Sからパス抽出。 A=Sの終端パス追加。B=「{A}{M}」のファイル列挙。C=空。 Bで反復、「{A}{対象}」をCに配列追加。 Cで戻る。 ●絶対パス全ファイル列挙({文字列=?}Sの|Sを|Sで) Sの全ファイル列挙して戻る。 ●絶対パスフォルダ列挙({文字列=?}Sの|Sを|Sで) A=Sの終端パス追加。B=Sのフォルダ列挙。C=空。 Bで反復、「{A}{対象}\」をCに配列追加。 Cで戻る。 ●絶対パス全フォルダ列挙({文字列=?}Sの|Sを|Sで) Sの全フォルダ列挙して戻る。 名前 コメント
https://w.atwiki.jp/isoroku_be/pages/78.html
情報 作者名:moka 引用元:日本語プログラム言語なでしこ公式バイブル「なでしこの育て方」 概要 二次元配列をテーブルタグで囲んで返します。 解説 引数 S:二次元配列 A:タグ属性 返り値 HTMLソース サンプルプログラム S=「a,b c,d」をCSV取得。 Sを「border=1 cellpadding=5」でテーブルタグ作成。 それを言う。 // table border=1 cellpadding=5 // tr td a /td td b /td /tr // tr td c /td td d /td /tr // /table //本体 ●テーブルタグ作成({配列=?}Sを{文字列=""}Aで) Rとは文字列 #結果 Tとは文字列 #一時格納用 もし、S=「」ならば、S=それ もし、A 「」ならば、A=「 {A}」 R=「」 Sを反復 T=「」 対象を反復 Tに「 td {対象} /td 」を追加 Rに「 tr {T} /tr 」を一行追加 R=「 table{A} {~}{R} /table {~}」 Rで戻る。 名前 コメント
https://w.atwiki.jp/bonze2/pages/19.html
ファイルの入力 ファイルからレコードを読むなら、TSOのEXECIOを利用。 "EXECIO 1 DISKR INDD (STEM LINE.)" /* INDD というDDから1レコード読んで、配列 LINE に入れる SAY LINE.1 使用メモリを気にしないなら、いっぺんに全レコードを読んでしまうこともできる。 "EXECIO * DISKR INDD (STEM LINE.)" /* INDD というDDから全レコードを読んで、配列 LINE に入れる DO I=1 TO LINE.0 /* 配列の添字 0 の要素はレコード数 SAY LINE.I /* 1レコードずつ順に表示 END ファイルを1レコードずつ読んで処理をする典型的なコード DO WHILE 1 "EXECIO 1 DISKR INDD (STEM LINE.)" IF RC 0 THEN LEAVE /* ファイルの終わりに達したら DO WHILE ループから抜ける (do something) END /* DO WHILE 1 の終わり ファイルの出力 LINE.1= HELLO,WORLD "EXECIO 1 DISKW OUTDD (STEM LINE.)" /* OUTDD というDDに LINE.1 の内容を1レコード書き込む 複数レコードをいっぺんに出力する場合 LINE.1= //JOBNAME JOB CLASS=A,MSGCLASS=A LINE.2= //IEFBR14 EXEC PGM=IEFBR14 LINE.3= //DD1 DD DSN=DATASET,DISP=(MOD,DELETE),SPACE=(TRK,1),UNIT=SYSDA "EXECIO 3 DISKW OUTDD (STEM LINE.)" /* OUTDD というDDに LINE.1〜LINE.3 の内容を書き込む レコード数を変数で指定する場合 LINE.1= //JOBNAME JOB CLASS=A,MSGCLASS=A LINE.2= //IEFBR14 EXEC PGM=IEFBR14 LINE.3= //DD1 DD DSN=DATASET1,DISP=(MOD,DELETE),SPACE=(TRK,1),UNIT=SYSDA (略) LINE.9= //DD7 DD DSN=DATASET7,DISP=(MOD,DELETE),SPACE=(TRK,1),UNIT=SYSDA LINE.0=9 /* 出力するレコード数 "EXECIO * DISKW OUTDD (STEM LINE.)" TSOコマンドを発行し、その結果を受け取る OUTTRAP() で、TSOコマンドのレスポンスを配列に受け取るようにする。 X=OUTTRAP( LINE. ) "LISTDS ( dataset name ) MEMBERS" /* 配列 LINE. にLISTDSコマンドのレスポンスが入る DO I=1 TO LINE.0 /* LINE.0 はコマンドレスポンスの行数 (do something) END X=OUTTRAP( OFF )