10/02/18 19:59:25
>>604
剰余も割り算も使わないよ
v[siz1 * idx2 + idx1]
乗算と和だけ
あとベクタのベクタはメモリに関するコストが増える
608:デフォルトの名無しさん
10/02/18 20:01:36
URLリンク(kansai2channeler.hp.infoseek.co.jp)
クイックソートを再帰なしに作ったんですが,なぜかソートされません・・・なぜorz
609:デフォルトの名無しさん
10/02/18 20:17:17
>>605-607
確かにorz
自分の勘違いも含めたベンチコード
URLリンク(codepad.org)
vectorにしたら結果が大きく変わるってことはないと思うんで
思ったほど差はない模様
610:デフォルトの名無しさん
10/02/18 20:52:26
>>608
まずpartitionがうまく動いてるか調べてみたら?
611:569
10/02/18 22:35:34
>>571 レスありがとう.
boost::operators 調べてみたけど,クラスに operator を自動追加してくれるだけで
関数オブジェクトには利用できないのかな?
ソート対象のメンバ変数ごとに Less の関数オブジェクト用意して,
逆順ソートする場合は Less の関数オブジェクトから Greater の関数オブジェクトを生成して
ソートに利用する手法は良くやりそうだけど,自分で作るしかないか…
612:デフォルトの名無しさん
10/02/18 23:01:17
#if defined(Q_WS_MAC)
何これ?
613:デフォルトの名無しさん
10/02/19 00:34:01
#define TEST 5でマクロを定義し、char型の配列等に文字列TESTを代入すると、
"5"が判断されなくなってしまいます。
マクロを文字列に代入し、尚且つ置き換え後の値を取り出すにはどうしたらよいのでしょうか?
614:デフォルトの名無しさん
10/02/19 00:53:02
こんな感じの??
URLリンク(codepad.org)
615:デフォルトの名無しさん
10/02/19 00:54:44
何かエラー出るな。
URLリンク(codepad.org)
616:デフォルトの名無しさん
10/02/19 01:02:39
#define TEST "5" じゃダメなん?
617:デフォルトの名無しさん
10/02/19 01:07:15
>>616
まったくダメなことはないけど、質問がよく解らんから普段使わない機能を使ってみた。。。vv
618:デフォルトの名無しさん
10/02/19 01:22:07
>>591
dateの戻り値をdeleteされる場合を考慮しはじめると、何をどうチェックしたところで無駄。
どうにもならない。
619:デフォルトの名無しさん
10/02/19 01:24:05
>>599
二重deleteを防ぎたいなら「deleteしたらNULL入れる」なんてせずに、
auto_ptr/vectorをはじめとするRAIIスタイルのライブラリを使ったほうがいい。
無駄なNULL代入が減る分、効率も向上する可能性が高い。
620:デフォルトの名無しさん
10/02/19 01:29:02
ご返答ありがとうございます。
試してみたけど駄目でした…
やりたいことは、
#define TEST 5
…
char * a = { "TEST" };
この変数aがどうやってもTESTという文字列でしか認識されず、5が出せないのです。
char型の配列にはヌル文字が付くからマクロとして認識されてないのでしょうか…?
621:620
10/02/19 01:37:42
型がLPCTSTRの所で変数aを入れてるのが原因かなぁ
622:デフォルトの名無しさん
10/02/19 01:37:50
なんか>>616でいいような気がするが。。。
文字列を結合したいならそういう関数を使う。sprintfとか
623:デフォルトの名無しさん
10/02/19 01:39:05
情報の後出しは基本的にご法度だぜ。。。
ウインドウズ使っていいなら簡単な方法がある。ちょとコード書く。
624:デフォルトの名無しさん
10/02/19 01:39:47
む、LPCTSTR・・・・・とかhoge_sとか・・・
この辺の話はどうにかならんのかね・・・?
625:デフォルトの名無しさん
10/02/19 02:00:42
>>620
文字列リテラルの中はマクロ展 されない。
626:620
10/02/19 02:01:49
char型の配列使わずにint型の配列にTESTを入れて処理を進められました('A`)
大変ありがとうございました
627:デフォルトの名無しさん
10/02/19 02:05:03
#define TEST "5"
…
char * a = { TEST };
これでいいんでないの?
628:デフォルトの名無しさん
10/02/19 02:05:12
お前それで良いのか
629:デフォルトの名無しさん
10/02/19 02:06:09
おっと>>628は>>626向け
630:デフォルトの名無しさん
10/02/19 02:06:37
>>586 URLリンク(codepad.org)
631:デフォルトの名無しさん
10/02/19 02:11:36
>>620
#include "boost/preprocessor/stringize.hpp"
#define TEST 5
char const* a = BOOST_PP_STRINGIZE(TEST);
632:デフォルトの名無しさん
10/02/19 02:13:03
手を抜くつもりが黒魔術になってしまった。
後悔はしてるが反省はしていない。
#include <stdio.h>
#include <locale.h>
#include <tchar.h>
#include <windows.h>
#define TEST 5
#define BufSize 1024
int main(){
TCHAR BUF[BufSize];
_tsetlocale(LC_ALL, TEXT("Japanese"));
/*wsprintf(BUF,TEXT("ほげほげ戦隊 ほげほげ%d"),TEST);*/
_sntprintf_s(BUF,BufSize,TEXT("ほげほげファイブ「%d」"),TEST);
_tprintf(TEXT("%s"),BUF);
return 0;
}
633:デフォルトの名無しさん
10/02/19 02:23:19
>>610
なんかうちの環境が悪いだけでしたあざす
634:デフォルトの名無しさん
10/02/19 02:29:21
>>630
これってstaticにする意味って何?
あおりじゃなくてただの素人です
635:デフォルトの名無しさん
10/02/19 02:30:09
俺は文字列リテラル外すマクロが欲しい
636:デフォルトの名無しさん
10/02/19 02:35:19
>>635
文字コードすべて暗記してint型の配列を確保してエンディアン考慮して
文字を16進数にでもして並べていけばリテラルいらないよ
637:デフォルトの名無しさん
10/02/19 02:40:11
>>634
static にしないと引数として this ポインタが付く。無駄な引数は付けないのが当たり前。
638:デフォルトの名無しさん
10/02/19 02:44:40
リテラル嫌なら
int a[2] = { 0x65676f68,0x00000000 };
printf("%s\n",(char*)&a[0]);
639:デフォルトの名無しさん
10/02/19 02:52:21
>>638
で、そう書く利点は?
640:デフォルトの名無しさん
10/02/19 02:53:55
無いよ
リテラルがいやとかぬかすから書いただけ
わざわざこんなめんどくさい書き方しなくてもいいようにC言語なりに考えられてるのに
いやとかぬかすからねえ
641:デフォルトの名無しさん
10/02/19 02:56:11
表示サンプルがhogeだったからまずかったのかね?
642:デフォルトの名無しさん
10/02/19 03:05:36
>>637
private な static メンバ関数ってそういう目的があるんすね
ありがとうございます
643:デフォルトの名無しさん
10/02/19 03:07:01
文字列リテラルを勝手に外部化して後付けで差し替え可能なリソースを作ってくれるプリプロセッサを所望してるんだよな
644:デフォルトの名無しさん
10/02/19 03:10:34
>>643
いいたいことがイマイチよくわからんがエスパー的ひらめきだと
VC++のメニュー関連のリソースが浮かんだ
しかも手書きでやらないといけないというのを・・・
645:デフォルトの名無しさん
10/02/19 03:12:21
>>640
誰も嫌とはいってなくね?
646:デフォルトの名無しさん
10/02/19 03:13:55
おまけにVCのリソースを標準関数に喰わせようとすると無茶苦茶大変だし。
647:デフォルトの名無しさん
10/02/19 03:15:07
vsくらいになるとsettingとかあるんだけどな
勝手にxml読み込んだり書き出したりしてくれる機能があってそこへ
文字とかいれておけば呼び出せたりするんだが
648:デフォルトの名無しさん
10/02/19 03:24:32
文字列リテラル外部化って今でもできるんじゃね?
文字列リテラルだけ書き込みヘッダ用意してそこへ入れておけば・・・
そういうのとは違うのか?
649:デフォルトの名無しさん
10/02/19 07:23:21
>>613
解決しちゃったの?
こういう話だと思ったんだけど。
#include <stdio.h>
#define TEST 5
#define TO_STRING2(s) #s
#define TO_STRING(s) TO_STRING2(s)
int main()
{
const char *p = TO_STRING(TEST);
puts(p);
}
650:デフォルトの名無しさん
10/02/19 07:29:54
メモリの大きさがそれほど無い組み込み環境化だとC++って使われるんだろうか
std::stringとかの動作を考えてみてもすげー細かいレベルでメモリが断片化しそうなんだが
651:デフォルトの名無しさん
10/02/19 07:35:09
>環境化
環境下
652:デフォルトの名無しさん
10/02/19 08:21:59
>>650
相応にメモリの使用量や動的確保のタイミングに注意を払えばいいだけのこと。
C++ はそういう環境でも使えるようにできている。
653:620
10/02/19 12:18:39
>>625
>>627
>>631
>>632
>>649
マクロ展開できてなかったのですか…
632と649にある方法を試したところ、ちゃんとマクロとして認識され、5が表示できました。
boost入れてなかったんで631にある方法は試せなかったのですが、boostを利用する方法もあったんですね。
今後も似たような場面に出くわす可能性が高いので、提示されたサンプルはメモらせてもらいます。
ありがとうございました。