08/07/13 13:14:51
このスレ過疎ってるのでしょうか?
この話題↓で盛り上げてください!
やねう企画代表者やねうらお(本名・磯崎元洋)が
・ソフトウェアの不正コピーを行っていた
・労働契約上の違反をしていた
・他は不正コピーしていないことを証明しようとしてエロゲーのパッケージを発見し、
写真に撮ってアップロードしようとした。
URLリンク(d.hatena.ne.jp)
やねう企画の裏側(競馬の詐欺ソフトの製作現場)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
有限会社やねう企画(所在地・大阪府八尾市末広町2-1-2)が計画倒産
URLリンク(www.sia.go.jp)
やねうらおプロフィール
性格:友達から「チンピラ」「ヤクザ」と呼ばれている。前世で殺人鬼だった宿業を背負っているという妄想(自覚)あり。
最終学歴:専門学校卒
主な職歴:有限会社センキ(凌辱系アダルトゲームの製作会社)を経て独立、有限会社やねう企画を設立、2006年に計画倒産
代表作:『夜這いマニア』『盗撮マニア』『お楽しみCDシリーズ』『競馬詐欺ソフト』『BM98』
やねうらお語録
>「ワシのほうが潔癖やと思うんやけどな。
>絶対に違法コピーのソフトしか使わんし。
>たとえば強盗に入ったときに、ちょっとかわいそうになって
>十万円だけ残してったら、おかしいやろ?
>自分の『強盗する』という意思に対して矛盾やろ?
>だからワシは、一個も買ったソフトを使ったことがない!!」
761:デフォルトの名無しさん
08/07/13 13:18:26
759 :デフォルトの名無しさん [sage] :2008/07/13(日) 12:38:07
boostスレ過疎ってんな・・・w
760 :デフォルトの名無しさん [sage] :2008/07/13(日) 13:14:51
このスレ過疎ってるのでしょうか?
日本語が不自由のようだなw
762:デフォルトの名無しさん
08/07/13 14:27:07
キーワードによる自動コピペ
763:デフォルトの名無しさん
08/07/13 14:49:07
memset や memcpy の動作について質問です。
memset(buff, 0, 0); や memcpy(buff, work, 0);
764:763
08/07/13 14:50:35
すみません、途中で送信してしまいました。
memset(buff, 0, 0); や memcpy(buff, work, 0); のように
サイズが 0 の場合、何も行われないという認識で合っていますか?
MSDN では分らなかったです。
765:デフォルトの名無しさん
08/07/13 15:06:56
サイズ 0 ならガッされないなんて知ってても役に立たんだろ
766:デフォルトの名無しさん
08/07/13 15:09:41
>>764
そういう場合、不安だったらmy_memsetかなんか一個かましておけ
767:デフォルトの名無しさん
08/07/13 15:12:29
>>765
関数の呼び出し元にバッファ領域のポインタと領域サイズを渡させる場合に役に立ちます
memset や memcpy にサイズ 0 を渡しても大丈夫ということであれば、
領域サイズに 0 が指定された場合のエラーチェックをせずに済むケースがあるからです
768:デフォルトの名無しさん
08/07/13 15:25:06
規格書にはn文字ほげほげするとだけしか書かれてなかった希ガス。
詳しく知りたければJISのサイトでX3010を検索。
769:デフォルトの名無しさん
08/07/13 15:25:19
>Where an argument declared as size_t n specifies the length of the array for a
>function, n can have the value zero on a call to that function. Unless explicitly stated
>otherwise in the description of a particular function in this subclause, pointer arguments
>on such a call shall still have valid values, as described in 7.1.4. On such a call, a
>function that locates a character finds no occurrence, a function that compares two
>character sequences returns zero, and a function that copies characters copies zero
>characters.
0を渡すことはできるが、その場合でもNULLはダメらしい
770:デフォルトの名無しさん
08/07/13 15:44:01
>>766
なるほど、それは確かに賢いやり方ですね。
ちょっと考えてみます。
>>768
調べてみます。
>>769
NULL チェックだけは避けられないということですね。
やはり、エラーをチェックする自作関数をかました方が良いのかもしれないですね。
771:デフォルトの名無しさん
08/07/13 18:18:24
宣言と定義が別々になってるコンストラクタで、初期化リスト使う場合って
宣言と定義両方に初期化リストつけなきゃいけないんだっけ?
772:デフォルトの名無しさん
08/07/13 18:20:42
定義の方だけ
class A {
int a;
A();
};
A::A():a(0){}
773:771
08/07/13 18:25:33
ありがとう。
774:デフォルトの名無しさん
08/07/14 05:20:26
=== hoge.h ===
class hoge {
public:
template<typename T> T func(T a) const;
};
=== hoge.cxx ===
#include "hoge.h"
template<typename T>
T hoge::func(T a) const {
return a;
}
=== main.cxx ===
#include "hoge.h"
int main() {
hoge h;
int a;
h.func(a);
return 0;
}
775:774
08/07/14 05:22:22
GCC 4.0.1で、
$ g++ -c hoge.cxx -o hoge.o
$ g++ -c main.cxx -o main.o
$ g++ main.o hoge.o -o main
Undefined symbols:
"int hoge::func<int>(int) const", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
となってしまいます。
templateのメンバ関数というのは、これではまずいですか?
776:デフォルトの名無しさん
08/07/14 05:41:04
まずいです。
h.func(a); を書いたソースから hoge::func の実装が見えるようにして下さい。
ようするに hoge.h に実装を書いてください。
777:デフォルトの名無しさん
08/07/14 05:50:17
>>775
exportキーワードをサポートしてないC++処理系では無理
778:774
08/07/14 06:14:12
>>776-777
まじですか。なんともめんどくさい。
設計からやり直さないと。
ありがとうございました。
779:デフォルトの名無しさん
08/07/14 20:11:37
VC++ 2008はもうexportをサポートしてる?
780:デフォルトの名無しさん
08/07/14 20:14:37
ネイティブコードなんてシロモノはOSぐらいしか使わないような世界になったなら、
exportもサポートされるかもな。
781:デフォルトの名無しさん
08/07/14 20:19:25
じゃあ2008でも未サポート?
782:デフォルトの名無しさん
08/07/14 20:57:28
>>780
なんで?
783:デフォルトの名無しさん
08/07/14 23:23:50
今やオブジェクト間最適化が当然の如く行なわれている。
export実装がそんなに困難であるはずがない。
784:デフォルトの名無しさん
08/07/14 23:29:47
コードレベルで保持しないとダメだから難しいでしょ。
D言語はうまいことやってるけど。
785:デフォルトの名無しさん
08/07/14 23:31:36
そろそろVC++2008でexportが実装されてるか教えてくれてもいいだろう
786:デフォルトの名無しさん
08/07/14 23:33:17
>>785
それがないんだな。
787:デフォルトの名無しさん
08/07/14 23:39:11
うそ~ん
788:デフォルトの名無しさん
08/07/14 23:49:19
exportが実装されるまでvcはスルー確定だな
789:デフォルトの名無しさん
08/07/15 01:19:30
じゃ、どのコンパイラ使う気?
790:デフォルトの名無しさん
08/07/15 01:23:38
Cマガってもう再開しないのかな。
791:デフォルトの名無しさん
08/07/15 01:25:14
exportはおまえらが想像する程素敵じゃないのよとEffectiveC++3版にかいてあるよ
792:デフォルトの名無しさん
08/07/15 01:28:06
Comeau
793:デフォルトの名無しさん
08/07/15 08:20:16
ところでMore Effective C++が第2版になっても訳が最悪で読みづらいらしいが
実際どうなの?読む価値ナッシングぅ?
794:デフォルトの名無しさん
08/07/15 21:27:54
>>793
読解可能なら原書を。
そうでないなら、項目を中心に辞書的に活用。
読む本としては厳しい。
795:デフォルトの名無しさん
08/07/15 22:33:14
「訳が最悪」という論評は原著が熟読できていて初めて可能
そうでなければ他人の論評の受け売り
796:デフォルトの名無しさん
08/07/15 22:36:38
日本語版しか読んでないけど、読みにくいのは確か
797:デフォルトの名無しさん
08/07/15 22:47:18
2つの補い合う16ビット整数について学べる本だと聞いたのだが本当かな?
798:デフォルトの名無しさん
08/07/15 23:37:13
原著が糞かどうかは見えていないわけか
799:デフォルトの名無しさん
08/07/16 02:18:51
>>793
新訂版は知らんが、旧版についてなら>>794でFAだと思う。
はっきり誤訳とわかる箇所が散見される
(例:p.139 コンストラクターメンバ関数 → 例示コードでconstメンバ関数とわかる)、
一般的な訳語を使わない(例:省略時コンストラクター)などの問題がある。
訳者まえがきに「翻訳を急いだ」と書いてあるが、そういう問題かなという感じ。
URLリンク(www.pej-hed.jp) に新訂版の目次があるけど、
少なくとも訳語の問題はあまり変わっていないようす。
訳者は旧版の3人+新任1人なので、自分は読み直す気にはならない。
800:デフォルトの名無しさん
08/07/16 02:39:21
800ならC++滅亡
801:デフォルトの名無しさん
08/07/16 02:56:32
>訳者は旧版の3人+新任1人なので
懲りてないな。
トールキンで言うと戸田&山本の最凶タッグが成立するようなもんか。
802:デフォルトの名無しさん
08/07/16 14:34:49
省略時ナントカは JIS X3014 の術語だからなんとも言えないけど
const → コンストラクタ は酷いな… orz
C++使わない人が訳したんだろうね。
803:デフォルトの名無しさん
08/07/16 21:09:25
テンプレートを用いる際、引数として与えられた型があるコンセプトを満たすかどうかによって、
異なるテンプレートを用いることはできるでしょうか?
例えば、
template<typename T>
class foo
{
//Tがコンテナの要件を満たしてなければこの実装
};
template<typename T>
class foo
{
//Tがコンテナの要件を満たしていればこの実装
};
という感じのコードを書きたいと思っていますが、
やはりredefinition of 'class foo<T>'と怒られます。
上手く解決する方法はありますか?
804:803
08/07/16 21:17:36
ちなみに、解決方法は多少技巧的になっても構いません。
805:デフォルトの名無しさん
08/07/16 21:38:26
>>803
特殊化すればよろし
template< typename T, bool is_container >
class foo
{ /* コンテナ以外 */ };
template< typename T >
class foo< T, true >
{ /* コンテナの場合 */ };
is_container を自動的に判定するにはメタ関数を作る必要がある
806:デフォルトの名無しさん
08/07/16 21:41:40
CLIで関数ポインタ配列の宣言がどうしても通らないんです。
よかったら教えてください。
public ref class Form1 : public System::Windows::Forms::Form
{
public:
...
int fn1(int,int);
int fn2(int,int);
int fn3(int,int);
int (*fp[])(int,int){
fn1,
fn2,
fn3
};
...
関数ポインタの配列が作りたいのですが、error C4368がでます。
807:デフォルトの名無しさん
08/07/16 21:43:35
>>806
C++/CLIは最早別の言語なので、専用スレへどうぞ。
808:デフォルトの名無しさん
08/07/16 21:45:11
>>803
これくらいなら出来る
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_integral.hpp>
using namespace boost;
template<class T>
struct Y {};
template<class T>
struct Z {};
template<class T>
struct X {
typedef mpl::if_<is_integral<T>, Y<T>, Z<T> >::type type;
};
809:デフォルトの名無しさん
08/07/16 21:46:08
>>805
ありがとうございます。
そのメタ関数の作り方を教えていただけないでしょうか?
あるいは、そのようなテンプレートプログラミングについて解説してあるサイトを紹介してくださると助かります。
810:デフォルトの名無しさん
08/07/16 21:46:10
>807
すみません。移動します。
811:デフォルトの名無しさん
08/07/16 21:57:08
>>808
boost::MPLにはあまり詳しくないのですが、
Xが整数型なら X<T>::type == Y<T> 、そうでなければ X<T>::type == Z<T> ということでしょうか。
組み込み型か否かというような判断ではなく、
例えば「Tがメンバにbegin()とend()を持つか否か」や「Tがメンバにoperator()を持つか否か」で、
使うテンプレートを分岐させたいのですが、解決方法があれば幸いです。
812:デフォルトの名無しさん
08/07/16 22:27:34
>>811
任意の型について
>「Tがメンバにbegin()とend()を持つか否か」や「Tがメンバにoperator()を持つか否か
を判定することは出来ないと思います
x.begin()
と呼ぶのではなく
begin(x)
などと呼んで型ごとにオーバーロードを用意するとかではダメですか?
Boost.Range がこの方法を採用して begin を持つ型にひ持たない型にも対応しています
私もたまにそうします
813:デフォルトの名無しさん
08/07/16 22:38:50
>>812
うーん、やはり無理ですか。
コンテナに対するオペレータのオーバーロードを考えていて、
コンテナが高階か1階かによって適用させる関数を変えたいと考えていたのですが、
どうもそういう発想に基づかない実装が必要なようですね。
ありがとうございました。
814:デフォルトの名無しさん
08/07/16 22:45:39
>>799, >>802
だーかーらー、原著者がかましたボケかどうか確認しろつーの
815:デフォルトの名無しさん
08/07/16 23:03:42
>>813
役に立たないかもしれないけど、要件はクリア?
#include <iostream>
template<class T> struct Y { T m; };
struct Z {};
template<template<class T> class C>
struct X
{
template<class A>
static void f(C<A> x)
{
std::cout << "f(C<A>)" << std::endl;
f(x.m);
}
template<class B>
static void f(B x)
{
std::cout << "f(B)" << std::endl;
}
};
int main()
{
Y<Y<Z> > y;
X<Y>::f(y);
return 0;
}
816:デフォルトの名無しさん
08/07/17 00:17:58
>>815
この方法だと、型を1つ引数に取るテンプレートクラスか否かで分岐させているということでしょうか。
できればそれに限らないコンテナ(boost::arrayとか)も一括して扱いたいのですが、
確かにvectorやdeque, listに関してはこれで扱えそうですね。
教えてくださってありがとうございます。
817:デフォルトの名無しさん
08/07/17 22:37:21
テンプレートクラスのインスタンス化についての質問で、
以下のようなことがしたいのです。
※以下の全ての例は当然コンパイルはできません。
// 動的にテンプレートの型
list* getList(int n) {
if(1 == n) {
// int型のリストをreturn
}
if(2 == n) {
// double型のリストをreturn
}
}
int main() {
// 型情報を持たないlistクラスの変数を用意(したい)
list* x;
int num;
std::cin>>num;
// キーボードで入力した値によって型を変える
x = getList(num);
}
このような処理を行いたいのですが、どうにかならないでしょうか…
JavaにおけるObjectクラスのようなクラスがあればいいのですが。
818:817
08/07/17 22:37:52
私が考えてみたのは
(1)typedefを使う
(2)マクロを使う
で、どちらも上手くいきません。
(1)については、
// typedef の前方宣言(をしたい)
typdef typ_t;
// 動的に型情報を決定(これだとスコープ的にダメ?)
if(1 == n) {
typedef int type_t
}
if(2 == n) {
typedef double type_t
}
// 動的に定まった型を用いてインスタンス化
list<type_t> x;
こんな感じにできないかと思ったのですが、
宣言がの方法がわかりませんでした。(できない?)
819:デフォルトの名無しさん
08/07/17 22:38:30
(2)については
// とりあえず何か型を設定
#define TYPE_T int
// 動的に型情報を決定
if(1 == n) {
#undef TYPE_T
#define TYPE_T double
}
if(2 == n) {
#undef TYPE_T
#define TYPE_T char
}
// 動的に定まった型を用いてインスタンス化
list<TYPE_T> x;
これは n の値によらず最後に #defile された値
が常に適用されてしまい、ダメでした。
(今の場合でしたら常に list<char> が生成されてしまう。)
もう本当にお手上げ状態でして、みなさんのお知恵を
お借りしたいと思っている次第でございます;;
何卒よろしくお願いします
820:デフォルトの名無しさん
08/07/17 22:39:41
>>818最後の行
×宣言がの方法が
○前方宣言の方法が
821:デフォルトの名無しさん
08/07/17 22:57:57
>>819
テンプレートクラスを使わずに普通のクラスで対処したらいけないの?
class list { /* listの定義 */ };;
class IntegerList : public list { /* IntegerListの定義 */ };
class DoubleList : public list { /* DoubleListの定義 */ };
list* getList(int n) {
if ( n == 1 ) { return new IntegerList(); }
if ( n == 2 ) { return new DoubleList(); }
}
822:デフォルトの名無しさん
08/07/17 23:15:06
インスタンス化クラスの型はコンパイル時に解決するから、実行時の多態性を実現する目的には向かない。
823:デフォルトの名無しさん
08/07/17 23:20:01
テンプレートはコンパイル時の問題を解決するための道具です
実行時には役立ちません
実行時の問題は実行時用の道具で対処したほうが良いでしょう
824:デフォルトの名無しさん
08/07/17 23:29:17
>>821
元々の目的が
「テンプレートクラスの型指定を実行時に動的に行いたい」
ということですので、それだと本来の目的に合わないのです。
が、>>822 >>823 さんの仰るように、そもそも本来の目的の
方向性が良くなかったようで…。
一度構成を考え直してみたいと思います。
みなさん、どうもありがとうございました。
825:デフォルトの名無しさん
08/07/17 23:53:05
boost.variantじゃ駄目なのか
826:デフォルトの名無しさん
08/07/18 04:24:38
今、とある解説書でC++の例外を勉強しているのだが、投げられた例外を
受け取る例外ハンドラがない場合、terminage()が呼ばれabort()が呼ばれると。
abort()は何の後処理もせずプログラムを終了させるから具合が悪いという
ことが書かれているのだが、プログラムが終了すればすべてメモリは解放
されるのと違うの?プログラムが終了してまで、何か禍根が残るなんてこと
あるの?
827:826
08/07/18 04:25:20
ミス
terminage() → terminate()
828:デフォルトの名無しさん
08/07/18 04:33:50
>>826
ファイルシステムとかデータベースとか。
mkdir() を使ったロックなんかがわかりやすいかな?
829:826
08/07/18 04:39:16
レスどうも。
つまりプログラムとは独立したなんらかのリソースを操作する場合に
影響が残るということか…
830:デフォルトの名無しさん
08/07/18 04:54:12
VC++2008で
void f() throw( hoge1, hoge2, hoge3);
みたいな例外指定ってサポートされてないんだね。
標準C++勉強してると、意外と最近のコンパイラが標準準拠していない
ことに気づく。
831:デフォルトの名無しさん
08/07/18 07:57:37
むしろ準拠しなくてもOSが「問題ないぜ!掛かって来い冷害!」
832:デフォルトの名無しさん
08/07/18 13:08:34
初心者で申し訳ないのですが、
googleのsparse_hash_mapを使おうとして、マニュアル通り
#include <iostream>
#include <google/sparse_hash_map>
using namespace std;
using google::sparse_hash_map;
..
int main () {
sparse_hash_map<const char *, int, hash<const char *>, eqstr> months;
とすると、
'hash' was not declared in this scope
と、hash<const char *> すら定義されていないと言って怒られてしまいます。
hash_mapの場合も同じだったのですが、どうするといいでしょうか。
環境は g++ (GCC) 4.1.1 20070105, Linux FC6です。
よろしくお願いします。
833:デフォルトの名無しさん
08/07/18 13:25:34
#include <ext/hash_fun.h>
を追加してみてはいかがでしょう。
834:デフォルトの名無しさん
08/07/18 14:28:03
>>833
ありがとうございます。
もう一度追加してみたのですが、エラーメッセージは同じのようでした。
ちなみに using __gnu_cxx; したり、__gnu_cxx::hash<const char *>と
すると、もの凄いエラーメッセージが出ます。。
835:832
08/07/18 18:20:56
すみません、自己解決しました。
上のコードの struct eqstr の持つ比較関数
bool operator() (const char *a, const char *b) const
で、最後の const が抜けていたのが原因のようでした。
using namespace __gnu_cxx; で const を加えると、問題なく通りました。
# たったそれだけで長大なエラーメッセージが表示されるとは、
C++、恐ろしい子・・・!!
836:デフォルトの名無しさん
08/07/18 18:31:34
最初の方の数個のエラーだけ見て推測すりゃ良いだろ。
コンパイル時間と長大なエラーメッセージに怖気づくなよ。
837:デフォルトの名無しさん
08/07/18 23:32:51
>>830
VCはずっとサポートされないままだね。(他は知らないけど)
やっぱ難しいんかな。
838:デフォルトの名無しさん
08/07/18 23:45:04
ζ
/ ̄ ̄ ̄ ̄\
/ |
| ⌒ ⌒ /|
| (・) (・) |||||||
| ⊂⌒◯-----∂)___ ___
| ||||||||_ / ゙Y" \
\ヽ_/ \/ \
\ / \
/ ̄ ̄ ̄ ̄) * ( ̄ ̄ ̄ ̄)
| ─< |\ >─ (
| ) / (|ミ;\ ( )
ヽ  ̄ ̄) /(___人|,iミ'=;\ (  ̄ ̄ )
/" ̄ ̄ ̄ ̄ / 《v厂リiy\  ̄ ̄ ̄ ̄\
/ / ゙|,/'' v:,,、.¨)z,_ \
/ / ミ/ .-─ .゙》z、 \
/ / 〔」″ノ‐ 、u ¨\ )
( / ゙|, ..冫 .rー  ̄\_ |
| 〔 ミ./′ ..r-ー __,,ア┐ |
| | {. .,,,, .′ .´′ .¨\|
| | ∨ ノ冖′ =vvvvvv¨\
| / ミ. ,i' .゙\_
| / .{. ノ ,r¬″ .¨\
839:デフォルトの名無しさん
08/07/18 23:49:41
>837
実装するだけなら全く難しくないと思うが
関数に try, catch 差し込んで unexpected 呼ぶだけでしょ
840:デフォルトの名無しさん
08/07/19 00:32:21
例外指定なんて誰も使わないから別にいい
841:デフォルトの名無しさん
08/07/19 16:56:54
Javaは例外指定必須だけどうっぜえ割に大してバグが減るわけでもない
はっきり言って全くいらない機能
842:デフォルトの名無しさん
08/07/19 23:51:23
同意。C#の設計者もアレあんまし意味無いだろって言ってる品。
URLリンク(www.artima.com)
843:デフォルトの名無しさん
08/07/20 07:52:16
>>838
これって遠近法で描かれたウンコなのかドリルなのか気になる
844:デフォルトの名無しさん
08/07/20 09:28:32
激突
アナル vs ドリル
845:デフォルトの名無しさん
08/07/20 10:54:04
new/delete演算子をオーバーライドしたいのですが、
これらの中からもとのnew/deleteを呼ぶにはどうしたらよいですか?
846:デフォルトの名無しさん
08/07/20 14:57:11
置かれている状況が分からないから何とも言えないけど、
::operator newと::operator deleteでどうよ。
847:デフォルトの名無しさん
08/07/20 17:09:26
operator newをオーバーライドしたなら、必要なのはメモリの固まりなわけで、
mallocでも呼んどきゃいいんでね?
848:デフォルトの名無しさん
08/07/20 17:58:46
>>847
コンストラクタを呼びたいんじゃね?
849:デフォルトの名無しさん
08/07/20 18:09:06
「new演算子のオーバーライド」で、どのコンストラクタを呼びたくなるわけ?
ひょっとしてたとえば、メモリ管理クラスがあって、operator new()で
そのメモリ管理クラスをインスタンス化するためにnewしたくなったけど、
メモリ管理クラスのメモリはどうするんだってな話?
850:デフォルトの名無しさん
08/07/21 04:35:49
クラスのメンバ関数が、自分自身をdeleteする処理を行っても
安全なのでしょうか?
つまりdelete this;ってことになるかな。
自分自身が解体された後にメンバ関数からリターンするって何か変ですよねぇ。
しかもdelete this;の後にも処理が続いてたらやばいですよね。
851:デフォルトの名無しさん
08/07/21 06:40:13
>>850
安全。ただしもちろん、それやったあとにそのインスタンスを使っちゃいけない。
たとえばboost::intrusive_ptrみたいに、値に自身の参照カウンタを持たせるスマートポインタの場合、
値となる型に
void Release() { if (!--refCount_) delete this; }
みたいなメンバ関数を用意することになる。
852:デフォルトの名無しさん
08/07/21 06:41:32
規格上どうなってるかは知らないけど、そういうことをやってるライブラリは知ってる。
他のメンバーにアクセスせずにリターンするだけなら問題はないような。
実際どっちのデザインがいいのだろ。
A a = A::createInstance();
a.Free();
A::Free(a);
853:850
08/07/21 06:50:27
レスありがとうございます。
deleteした後に余計なことしなければ、いけるってことですね。
854:デフォルトの名無しさん
08/07/21 16:09:12
現在ublasを使っていて少しつまづいてしまったので教えていただきたいことがあるのですけど
教えていただけないでしょうか?
ある行列を多くの行列演算の和として計算したいのですが、
代入を繰り返すことでおそくなってしまいます。
例えば以下のような例です。
for(i=0;i<100;i++){
MAT1+=some_matrix;
}
some_matrixには毎回べつの行列が計算されてはいります。
expression template でこれを高速可できるということですが、
for文の中で毎回代入していまうとその時点で式が評価されてしまうので遅くなってしまうようです。
式そのものを変数として保持しておくような事はできるのでしょうか?
初歩的な質問ですみませんがどなたかお願いします。
855:デフォルトの名無しさん
08/07/21 16:15:30
autoやdecltypeがあればいいんだがなぁ。
856:デフォルトの名無しさん
08/07/21 16:36:33
draw_mark = rand() % 4 + 1;
draw_digit = rand() % 13 + 1;
if(h) {
printf("%sの%s\n", mark[draw_mark-1], digit[draw_digit-1]);
}
r = total[draw_digit-1];
この文の+1と-1はあってもなくても結果は同じですよね? 気になったので教えてください
857:デフォルトの名無しさん
08/07/21 16:46:49
他の場所で使ってなければ同じ。
858:デフォルトの名無しさん
08/07/21 18:23:52
結果は同じでも、可読性が違う。
乱数の結果が+1してあれば「乱数値を1オリジンに変換している」というニュアンスが伝わるし、
配列のインデックスが-1してあれば「カード番号を0オリジンに変換している」というニュアンスが伝わる。
859:デフォルトの名無しさん
08/07/21 18:34:07
一方、ロシアは0オリジンで乱数値を扱った。
860:デフォルトの名無しさん
08/07/21 18:39:15
>>859
そういう無意味な書き込みして楽しい?
そうかぁ、寂しい青春送っているんだね。
861:デフォルトの名無しさん
08/07/21 18:49:41
>>860
>>860