[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 01/07 16:29 / Filesize : 90 KB / Number-of Response : 382
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part115 [転載禁止]©2ch.net



1 名前:デフォルトの名無しさん mailto:sage [2014/12/18(木) 13:46:24.42 ID:Mboq20NA]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part114
peace.2ch.net/test/read.cgi/tech/1408743258/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]2ch.net
peace.2ch.net/test/read.cgi/tech/1417179292/

次期規格C++1yはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

239 名前:デフォルトの名無しさん mailto:sage [2014/12/28(日) 23:30:08.99 ID:fTdAgh8I]
>>227
そういう場合はメソッドそのものもconstにするけどよく使う
const取り除いた同名メソッド二つ用意することもあるけどそれはクラスオブジェクトがconstでもconstじゃなくても同名で呼び出せるようにするため
string::begin()もそんな感じ
厳密にはconstじゃないけど、const stringのときはconst_iterator、constついてないstringオブジェクトの時はiterator返す

240 名前:デフォルトの名無しさん [2014/12/29(月) 03:29:57.82 ID:Zvu39mrs]
>>206
ありがとうございます!
できました!

もう一つ聞きたいのですが

FloatBuffer フロバ;
arraylist <float> リスト= new arraylist<float>();

リスト.add(ほにゃらら);


ByteBuffer ばば = ByteBuffer.allocateDirect(リスト.size() * 4);
ばば.order(ByteOrder.nativeOrder());
フロバ = ばば.asFloatBuffer();
for ( i = 0; i < リスト.size(); i++){
フロバ.put(リスト.get(i));
}
フロバ.position(0);

こんなようなことって出来ますか?

241 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 07:57:13.86 ID:R9uwHG6j]
>>239
> そういう場合はメソッドそのものもconstにするけどよく使う

メソッドの const は意味が違う
const にするケースが多いのは確かだけど

242 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 08:14:31.75 ID:RCKTbDKZ]
>>240
std::vector内部の要素は連続した領域に確保されるから、
float* フロバ = リスト.data(); // または &リスト[0]
でいいんじゃないの?
もしくは リスト[i] とそのままアクセスしても効率は変わらんよ。

243 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 08:35:43.34 ID:NcjyMXWK]
const/非constメソッド両方つくるのめんどくさいんだがどうにかならんのかアレ
片方だけつくってconst_castはなんか違う気がするし

244 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 08:43:07.84 ID:RbfS6PMd]
#define _CONST(DECL,DEF) \
DECL DEF\
const DECL const DEF

_CONST(void func(),{return ;})
うーん・・・

245 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 09:55:34.36 ID:KuYXSH39]
>>243
名前も引数も同じでconst有無の違うのを2つ作るの?
紛らわしいからやめとけ

246 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 09:58:33.01 ID:BlWo3aSQ]
自分はconst付きしか作らないけどconstなし作るといいことあるのか?

247 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 10:00:37.25 ID:KuYXSH39]
>>246
データメンバーに変更を加えるメソッドはconstにできないけど



248 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 10:03:06.90 ID:BlWo3aSQ]
当たり前だけど変更を指示するメソッドにはconstつけないよ
それ以外のメソッドにconstなしを作るかって話でしょ?

249 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 10:05:54.36 ID:NcjyMXWK]
>>245-256
std::vectorとか典型的だけど
データメンバの参照を返さなきゃいけないメソッドなんかには結構必要になる

250 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 10:07:46.72 ID:KuYXSH39]
>>248
ああそれならconstは無条件に付ける

251 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 10:14:49.29 ID:Dgi09YwQ]
>>249
mutableでよくね?

252 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 11:26:39.60 ID:z79n6Uol]
>>251
何言ってんだ…?

253 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 11:37:50.70 ID:+aIcAFWQ]
>>250
>>251
理解出来てないのに知ったかぶるのやめた方がいいよ

254 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 17:24:11.38 ID:KuYXSH39]
mutableはうまく使えばconstメソッドを維持できるだろ、使いすぎるとconstの意味がなくなるが

255 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 18:06:12.34 ID:f7raGOFd]
コンパイルが通れば意味などどうでも良い
というのが254の考えなのであった

256 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 18:32:58.43 ID:z79n6Uol]
mutableはたとえば
vector<char> rawdata()const
{
unique_lock lk(mutex_);
return data_;
}
のmutex_に付けるとか意味的にconstであることを維持出来る場合に使うもの。
>>243
が言ってるのはvectorのoperator[]とかat、beginみたいな物の話で全く違う。

257 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 20:49:36.52 ID:4DL1BiPX]
>>230
コンパイラがコード生成する際に、値をコピーしないという判断が可能になる。



258 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 20:57:03.77 ID:z79n6Uol]
>>257
可能になるって書いたらそうしなくても良いみたいに読み取れるだろ。

259 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 22:42:34.36 ID:eLFvzmg+]
mutableとかconst_castとか使わなくて済むように、基底のところではちゃんとconstを付けろ。
具体的には、ODBCのAPIとか、引数がconst SQLCHAR*じゃなくてSQLCHAR*になっているせいで
ユーザーコードの側でmutableとかconst_castを使うはめになってるだろ?
そういうのやめてほしいんだよ。

(詳細忘れたので名前間違ってるかも試練)

260 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 23:34:37.63 ID:sxuLeXgN]
>>259
>ユーザーコードの側でmutableとかconst_castを使うはめになってるだろ

ライブラリが糞なためにconst_castが必要になることはあるが
mutableを使うのは何かおかしくね?
mutableなんて自分がクラスを定義する時に
ミューテックスかキャッシュに使う奴だろ

261 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 23:43:22.44 ID:NcjyMXWK]
>>260
ライブラリが糞なときはどっちかというと一時バッファにコピーして渡すほうを選ぶわ
例外出しちゃダメとかだとこれはこれで面倒だけど
糞ゆえに実際ほんとに書き換えてるかもしれんもの。

262 名前:デフォルトの名無しさん mailto:sage [2014/12/29(月) 23:51:02.54 ID:NJRVwBPj]
C/C++はmain関数からして糞だから細かいこと気にしてると禿げるぞ。
mainはいい加減に
int main(int argc, char const *const *argv)
を許すべき

263 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 00:11:34.57 ID:/MaaffoK]
>>261
俺もそうしてる。

264 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 00:15:55.66 ID:jrN3+PoU]
>>260-263
あんたらの言う通りだ。
オレが言いたかったことはわかってくれ。

265 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 00:16:13.97 ID:39ECbyHQ]
>>258
どんなコードを生成するかは、他にも条件がある。

266 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 01:44:21.10 ID:1zc8xpv9]
>>262
普段からint main(int argc, const char argv[])って書いてるけど問題あるの?

267 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 03:57:45.78 ID:SbfdzLBU]
>>266
それだと値はread-onlyだけどポインタは変更可能になっちゃう
俺はそれを「頭隠して尻かくさず」と今から呼ぶ



268 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 04:21:16.22 ID:iV8mgJ7+]
>>266
1 規格上保証されていない
2 互換性の無い型を使うな
 const char **v = (char **)argv; //エラー
 const char *const *v = (char **)argv; // OK

269 名前: ◆QZaw55cn4c mailto:sage [2014/12/30(火) 04:23:36.15 ID:i+30FOkq]
でも argv を書き換えてどうこうする、というコードはあたりまえにあるからな‥

270 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 04:31:43.65 ID:iV8mgJ7+]
1 型を変えるんじゃなくてconst版も許可したいという話だろ?
2 argvを書き換える糞ソースはあるが
 *argvや**argvを書き換える糞ソースはそんなにはないだろう

271 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 04:32:54.78 ID:PFdyrfgS]
与えられたコマンドライン引数をある規則に従ってすり替える、って話だな

272 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 04:37:41.94 ID:iV8mgJ7+]
>>271
そんなのは
int main(int argv, char *argv[]) {
 魔改造(&argc, &argv);//この膣内でnew
}
でいいんじゃないの

273 名前:デフォルトの名無しさん mailto:sage [2014/12/30(火) 06:56:59.46 ID:f6h/n6k9]
strtokで空白->null文字に置き換えて処理するのはよく見
長さ変えず処理すればおk

274 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 00:24:27.07 ID:oy55ZnpW]
UTF-16/8の併走が確実になった時点でLua規模のインタプリタを規格に取り込んで文字操作と入出力を任せてしまえばよかったんだけどな

275 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 01:23:52.12 ID:n+VO5zpK]
>>274
C++で文字操作に困ってないんだけど、Lua入れたら何が嬉しいの?

276 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 02:34:12.62 ID:6T3zfuUi]
コピー禁止のクラスを作る場合、C++11時代でもboost::noncopyableを使うのが一番手っ取り早いの?

277 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 02:36:25.59 ID:Imw1KDaA]
=deleteでいいだろ



278 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 02:48:58.93 ID:n+VO5zpK]
03時代も2〜3行ほど追加するだけなのにわざわざboost使うまでもないよね。

279 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 06:55:38.56 ID:cgqKf6SH]
>>276
暗黙生成のルールは複雑だから4つ書いとけ
struct unko {
 unko(unko const &)=delete;
 unko(unko &&)=delete;
 void operator=(unko const &)=delete;
 void operator=(unko &&)=delete;
}
まさにボイラープレートとはこのことだ

280 名前:デフォルトの名無しさん mailto:sage [2014/12/31(水) 23:32:45.41 ID:7bpGH/R+]
-=・=- -=・=- ;

281 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 21:34:36.43 ID:n3V4qFhd]
A、B、C、Dの4つのクラスがあって
これらのインスタンスの合計が200以下になるように管理したいのですが
200×4を初めに確保してexistFlagなどで管理するべきか
200を越えないようにnew deleteするべきか
どちらが良いでしょうか

282 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 21:47:31.22 ID:JXjPsVlJ]
>>281
後者ができるなら前者にするメリットがわからないのだが

283 名前:デフォルトの名無しさん [2015/01/01(木) 21:58:47.29 ID:aUgqaYf8]
四つのクラスのスーパークラスを作ってスーパークラスのリストで管理

284 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 22:04:39.02 ID:c7lZY8p6]
4つのクラスを整理して総合した1つのクラスを作る

285 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 22:09:10.05 ID:TPRv8yF2]
毎回確保してたりしたら重くなるとかそういうのきいてんじゃね

286 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 22:14:47.34 ID:A86JtUaP]
そんなのそこがボトルネックになってから考えるべき。
早すぎる最適化はダメって昔から言われてるだろ

287 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 22:15:33.05 ID:UD8gY9kq]
union { A; B; C; D} の配列 [200]



288 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 22:16:04.26 ID:fLF7bH9Q]
もし生成消滅を1秒間に10万回ぐらい行うプログラムなら
ABCDのunionのメモリを200個静的に確保して
カスタムアロケーターで管理だな。
だが素人にはオススメできない。

289 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 23:28:17.98 ID:5bVQoG0Q]
placement new

290 名前:デフォルトの名無しさん mailto:sage [2015/01/01(木) 23:57:28.12 ID:flJTiBeb]
メモリの確保でc++はnewって初心者向けのサイトにあるけど、
実際業務で扱う場合はnewではなくてスマートポインタが当たり前だったりする?

291 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 01:01:42.01 ID:jkIjgD0V]
そもそもvectorとか使えたらそっちの方が断然楽だろ

292 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 01:43:11.89 ID:7+k4tJMb]
>>282-291
ありがとうございます
vector+スーパークラスのスマートポインタでインスタンスを管理することに決めました

もう一つ質問なのですが
Controlerクラスが、A,B,C,D4つの派生元であるスーパークラスSのスマートポインタのvectorを持っているとして
Controlerがあるインスタンスを実行中にそのインスタンスからBのインスタンスを作りたいとなったとき
インスタンスを作成できるのはポインタを持っているControlerなので、Controlerに確保する関数を作って
Controlerの参照をインスタンスに渡して確保する関数を実行するということになるのでしょうか?
これだと呼び出し先が呼び出し元を呼び出して何か違う気がしました

293 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 08:18:56.48 ID:2SopZcG5]
>>292
インスタンスの所属に関する良くある問題だと思う。
あなたの用途には当てはまらないかもしれないが、複数のControllerが存在し得て、
それぞれが200個までのA,B,C,Dを持てる場合には、どういう設計になるだろうか?

Controllerがシングルトンなのであれば、それを取得するグローバル変数 or 関数を
用意すれば、Controllerを引き回さなくて済むだろう。

294 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 10:19:55.57 ID:6s3QU+2U]
>>292
Controllerクラス(l一個多い?)が確保してるインスタンスをループで逐次実行するような作りなのかな?
引数で渡すか、インスタンスに変数で持たせるか、シングルトンやグローバル変数でアクセスするかってところだな

295 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 12:35:01.81 ID:F7Nf/+TC]
>>290
newかスマートポインタか、という比較は意味不明だな
newはメモリの獲得方法、スマートポインタはその開放忘れを防ぐ仕組みを持つ型の事だろ

296 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 12:52:35.55 ID:5Yq30nMG]
make_shared とか

297 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 13:15:09.87 ID:7+k4tJMb]
>>293-294
Controllerは実質シングルトンなのでアクセスさせる関数をグローバルに用意することにしました
ありがとうございます



298 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 13:24:49.90 ID:4efdvCq8]
vector<int> v = {1,2,3};
for_each(v.begin(),v.end(),[](int& n){ n *= 3; });
for_each(v.begin(),v.end(),[](int n){ cout << n << endl; });


このfor_eachの[](int& n)や[](int n)の部分がよくわからないです。
なんで( )の前に[ ]がつくのか、参照で値を渡してるのか渡してない時もあるのか。
たまに[&]な時もあったり、とにかくfor_eachがよく分からないので教えて下さい・・・

299 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 13:34:12.89 ID:zzU87XUx]
ラムダ式

300 名前:デフォルトの名無しさん [2015/01/02(金) 13:46:21.12 ID:7JlS4zBv]
TCHAR InfFile[MAX_PATH];
get_inf_file(InfFile); // ←ここでInfFileにファイル名が入る。

_tprintf(_T("%s\n"), InfFile); // 文字化けする。
printf("%s\n", InfFile); // 文字化けしない。


誰かが作ったget_inf_file(TCHAR * InfFile)という関数があり、実行すると
_tprintfで表示すると文字化けして、printfだと文字化けしないのですが
意味がわかりません。TCHARなのだから_tprintfを使うのではないのでしょうか

実際にこの関数を使わないで文字リテラルを指定すると文字化けしません。

301 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 13:50:58.27 ID:A83rtBgH]
>>300
Visual C++と理解したけど
#include <clocale>
#include <tchar.h>
_tsetlocale(LC_CTYPE, _T(""));
しても文字化けする?

302 名前:デフォルトの名無しさん [2015/01/02(金) 13:56:47.60 ID:7JlS4zBv]
>>301
文字化けします。

_tsetlocale(LC_ALL, _T("Japanese_Japan.932"));を指定してたのを_tsetlocale(LC_CTYPE, _T("")); にしました

303 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:01:08.04 ID:7UbCEqjn]
TCHARと_tprintfが一致してることは確認済み?

304 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:06:48.36 ID:A83rtBgH]
>>302
ならget_inf_fileがおかしいんだろう。
UnicodeビルドでUTF-16が入るべき所に
シフトジスが入ってるとみた。
printf("%04X", InfFile[0]&0xffff)
が二桁になってるだろ?

305 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:12:02.67 ID:F7Nf/+TC]
だな、誰かが作ったというget_inf_fileの充填結果が、こちらの期待する文字列エンコードと合致してないんだよ

306 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:33:20.81 ID:7JlS4zBv]
>>304-305
まじっすか、そんなこともあるんですね
作ったのが外人なので、なかなか直してももらえないと思うのですが

変換とかできるのでしょうか、VSだとコンパイル時にシンタックスエラーになるのですが

307 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:45:56.25 ID:F7Nf/+TC]
>>306
まず、自分のプロジェクトはunicodeなのかansiなのか
関数が充填したパス文字列は、バイト配列としての中身がunicode文字列なのかansi文字列なのか



308 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:48:01.53 ID:9E+XPI9z]
>>300
要するに、
get_inf_file(char * InfFile)
実際にはこういう定義で、マルチバイト固定で作られてるので
自アプリがUnicodeビルドならUnicodeに文字コード変換する処理を
かましてやればいい

309 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 14:54:46.06 ID:7JlS4zBv]
>>307-308
なるほど
英語圏の人はそこらへんいいかげんなのかもしれませんね

やってみます

310 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 16:51:47.96 ID:F7Nf/+TC]
アメリカ人は特に国際的意識が低いから、unicodeなんてどうでもいい存在だと思ってる
世界中の物の単位がインチやマイル、ポンド、華氏、だと思ってるしそれを外国人に押し付けてくる

311 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 17:11:39.19 ID:2SopZcG5]
でも日本人はlocaleやタイムゾーンに無関心なんだよな。
桁区切りはカンマ、小数点はピリオドだと思い込んでるし、tm_isdstの確認もしない。

312 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 17:53:40.11 ID:SdwiTPDP]
小数点にカンマを使う文化圏の人達にとってはソースコードが違和感だらけなんだろうなぁ
いずれ慣れるんだろうけど

313 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 18:10:23.94 ID:F7Nf/+TC]
>>312
ソース書く人は開発者の端くれだから、C/C++ソースが米国文化をデフォルトとするのはそう言うものだとおもってたんじゃないかな
数値や年月日書式はOSやライブラリでも面倒見てくれたし

314 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 18:21:32.55 ID:lBKtUQs0]
カンマは4桁ごとにして欲しい

315 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 18:31:24.40 ID:U8M1VAWr]
>314

本多勝一さんが、ずっと前からそう主張されて
いますね。わたしも同感です。
日本語の記数法からいって、4桁が合うと思います

316 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 20:04:31.50 ID:mlj15zVW]
>>315
日本語ではね
英語圏ではサウザンド、ミリオン、ビリオンの世界だから3桁がいいんだろうけど

317 名前:デフォルトの名無しさん mailto:sage [2015/01/02(金) 20:15:50.21 ID:buPBY5a2]
>>315
日本では確かに4桁の方がわかりやすいけど、
混同しないように別の記号にした方がよさそうだね。



318 名前:デフォルトの名無しさん [2015/01/03(土) 00:43:47.56 ID:/WOuYfDa]
大体、英米の鬼畜野郎どもは、「グローバルスタンダード」といってる癖に
SI単位使わないじゃあねえか。

いつまで、インチ、フット、ポンド使うつもりなんだ! liars!

319 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 00:48:50.05 ID:4e+tzVBF]
敗戦国=奴隷ッスカラネ
シャネッス

320 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 00:56:34.82 ID:Z3HMQ9o8]
>>319
日本に対してだけではない
アメリカ人は世界中がアメリカと同じ文化で生活してると思ってる

321 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 01:15:07.40 ID:kbrpwiZV]
インドでは最初だけ四桁、後はずっと二桁区切り

322 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 02:15:38.61 ID:2MH2vTPI]
アメリカはまだマシな方
イギリス人の頭の古さには脱帽する
イギリス=後進国

323 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 02:18:41.65 ID:AuGuhWCh]
イギリスは世界を征服してた事があるから、そりゃ過去が忘れられんだろうね

324 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 02:23:04.51 ID:AuGuhWCh]
日本語はコンピューターには向かない言語だと言わざるを得ない
逆に英語はコンピューターに向いてる

325 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 02:57:12.14 ID:kbrpwiZV]
日本語は逆ポーランド記法によりコンピューターに向く言語だと言わざるを得ない。
と思っていた時期もあったような

326 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 03:03:05.64 ID:pcdNaXmh]
>>324
www.entis.jp/doc/japanese/

327 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 03:26:48.71 ID:AuGuhWCh]
>>326
つうか文法を全く説明してないしw
まじめにやったら結構大変な分野だろうけど



328 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 04:37:47.93 ID:UGnRQrnS]
std::vectorの要素を番号を指定してeraseすることって出来ませんか?

329 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 04:40:19.30 ID:Cj8CgFQv]
begin() + indexで消せる

330 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 04:41:53.98 ID:UGnRQrnS]
ありがとうございます
そんな簡単だったんですね

331 名前:デフォルトの名無しさん mailto:sage [2015/01/03(土) 23:18:32.07 ID:Mi3y7m+B]
>>318
でも、SI単位系だと3桁区切りなんだよなぁ

332 名前:デフォルトの名無しさん [2015/01/04(日) 00:28:41.62 ID:WmAHCknd]
const char hoge[] = "abcdefghijk";
const char* const first0 = &hoge[ 0 ];
const char* const last0 = &hoge[ 3 ];
const char* const first1 = &hoge[ 5 ];
const char* const last1 = &hoge[ 9 ];
strcmp???( first0, last0, first1, last1 );

こんな感じで二組の文字列の範囲から辞書順比較する方法おしえてください

333 名前: ◆QZaw55cn4c mailto:sage [2015/01/04(日) 00:50:49.32 ID:kU4tFNpU]
>>315
本多勝一氏か‥
懐かしい名前だね‥
氏の「日本語の作文文法」の特に読点に関する考察はなかなか示唆に富むものだったが‥
しかし、あの体臭はどうにかならんかねえ‥ポルポトを擁護したという過去は忘れてあげるからさあ‥

334 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 01:14:59.66 ID:JaJcpRWI]
>>332
自分でコードを書く
以上

335 名前:デフォルトの名無しさん [2015/01/04(日) 01:16:25.64 ID:WmAHCknd]
>>334
そういうのは別にいらないので消えてください

336 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 01:25:27.23 ID:cj3MqVPN]
> 本多勝一氏か‥
写真捏造の人だよね

337 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 01:30:12.10 ID:0uOcaWII]
>>332
質問の意味がよくわからん



338 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 08:35:31.27 ID:99+RPTin]
コピーせずに処理したい→string_view自作しろ
比較アルゴリズムをしたい→スレ違いだ
ライブラリありませんか→ねーよ

339 名前: ◆QZaw55cn4c mailto:sage [2015/01/04(日) 13:01:12.49 ID:kU4tFNpU]
>>336
それは違うね‥

340 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:09:46.78 ID:+b+eo/V4]
フランスではカンマとピリオドの使い方逆なんだよな
それも規格でどっちでもいいことになってて結構あいまいさ残ってる
あとlong scale、short scaleアジア圏でも万進、万万進、ベトナム式下数とか数の問題は複雑

341 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:11:09.63 ID:XPPzqmKU]
>規格でどっちでもいいことになってて

ソースは?

342 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:16:11.02 ID:+b+eo/V4]
>>341
聞く前にググればすぐ出てくる
とりあえず
www.s-yamaga.jp/opinions/doryoko.htm
>日本は英米流で小数点には<.>派で、<,>は位取りに使っているが、仏独など多くの国では小数点は<,>で、<.>は位取り(位取りのため空白を使う場合もある)である。
>2003年10月にパリで開かれた国際度量衡会議でこの問題が検討された。
>17日の1国1票の投票の結果、「小数点は<,>か<.>のどちらかである」とすることで(つまりどちらでもよいということで)、当面の決着がついた。

343 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:20:42.93 ID:+b+eo/V4]
当時読んだ活字の記憶では
・位取りはなるべく空白を使うこと(カンマでもピリオドでもない)
 ただし強制ではない
・小数点は、カンマでもピリオドでもよい
というものだった

344 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:29:23.35 ID:TMi+DxjA]
テキスト形式で数値を羅列する場合は、該当地域の文化に設定されているMS ExcelがCSVとして正しく読み込める事、を条件としてるよ

VB6やC#/VBのFormat関数はデフォで小数点記号考慮してくれるけど、C++ではOS設定を見て自前処理だ

345 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:31:24.47 ID:pqc5lw4y]
どちらの表記法を使っているか分からないと
123,45 なら、何とか分かるけど
123.456 は小数なのか位取りなのか判断できないことになるね?

346 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:39:40.70 ID:TMi+DxjA]
ただFormat関数は、文化ニュートラル(実質アメリカン書式)を強制したいXML生成とか機器制御コマンドなんかではかえって迷惑だったりする

ThreadCultureをニュートラルにいちいち設定しないといけないし、あ、VB/C#の話ね

347 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 13:41:50.88 ID:HIHn1oXx]
>>346はどうしようもない馬鹿
C#でXMLを生成すんのに自前で変換すんなタコ



348 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 14:41:25.06 ID:LHqo9g84]
>>332
戻り値が bool で良ければ lexicographical_compare

349 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 14:49:44.93 ID:cj3MqVPN]
>>339
いやあってるよ
朝日らしく捏造ではなく誤用だという形で
本人も認めてるよ

350 名前:デフォルトの名無しさん [2015/01/04(日) 15:16:45.02 ID:WmAHCknd]
>>348
これで出来ました

>>334>>337>>338
お前らは本当に無能ですね

351 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 15:25:04.85 ID:FkvmMkr7]
>>348
へー こんなのあるんだ。
今までは長さの min() とって memcmp() してた。

352 名前:デフォルトの名無しさん [2015/01/04(日) 15:32:55.25 ID:UrD0d14K]
人を馬鹿だとか無能だとかいえるような
優秀な人がたくさん集まったスレッドなんですね

353 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 15:40:14.36 ID:B3IvvgpA]
この手の技術系スレは、自分は何もかも知り尽くした天才で周りは全て馬鹿、という態度で書いてる奴が時々居るのよ

354 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 15:51:23.91 ID:VyogYpyR]
皆わかっているとは思うけど
>>348>>351はQの自演だぞ

355 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 18:54:03.72 ID:ZWEZbTe4]
2つの集合a,bがあったときにその和集合,差集合をつくってaにいれたいです
a = a - b;
a = a + b;
みたいな感じにしたいのですが
今だと,下みたいにやってます
もっと簡潔にかけませんか?

set<int> a = { 1, 2, 3, 4 };
set<int> b = { 3, 4, 5, 6 };
set<int> c;

set_difference(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.end()));
a.clear();
copy(c.begin(), c.end(), inserter(a, a.end()));
for (int i : a) {
cout << i << " ";
}
cout << endl;

356 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 19:10:46.28 ID:FLoKSBkb]
>>355
boost::range版ならset_difference(a, b, inserter(c, c.end()));と書ける。
あとはa.swap(c);としたほうが簡単速い。 これ以上短くしたいなら関数にまとめる。

357 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 19:16:50.27 ID:L6fkGxZk]
集合クラス作って演算子オーバーロードしとくかなあ
ググりゃ転がってそう



358 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 19:37:56.46 ID:VX3mvVTy]
>>355
試してないけど、↓これじゃダメなの?
for(int i; b) { a.erase(i); } // a = a - b
a.insert(b.begin(), b.end()); // a = a + b

359 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 20:06:04.40 ID:LHqo9g84]
まんま std::set_difference と std::set_union なのでは…
これより簡潔にしたいなら自分でラッパーなり書くしかないと思うお…

360 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 20:30:47.31 ID:LHqo9g84]
ヒマだったから書いてみたお
コンテナを受け取るラッパー関数書くだけで意外とすっきりしたお
https://ideone.com/YikJPu

361 名前:355 mailto:sage [2015/01/04(日) 20:58:50.58 ID:ZWEZbTe4]
みなさんありがとうございます
競プロで書いているときにbeginとかendを書くのが大変だったので
なにか楽な方法を探してました
a.swap(c)とかa.insert(b.begin(), b.end())は全然思いつかなかったので参考になりました.使わせてもらいます
とりあえず他のintersectionとかはラッパ書いて処理してみます

ありがとうございました

362 名前:デフォルトの名無しさん mailto:sage [2015/01/04(日) 22:30:48.07 ID:kU4tFNpU]
>>349
なるほど、確認した。半年前の話か‥

363 名前:デフォルトの名無しさん mailto:sage [2015/01/05(月) 22:33:25.30 ID:f33/Q9TD]
前スレにあったプライベート変数にアスセスするコードをようやく理解した。
ほぼコピペだが記念に貼っとく
ideone.com/GVpGlQ

364 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 01:36:28.96 ID:vDyOmCN+]
何でそんな事したいのか分からないけど、初期化時にポインタ受け取れば済むような

365 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 14:33:17.28 ID:SaW7LnEX]
C++のstd::listってガベージコレクションはしていないんですよね?
フラグメンテーション起こさないようにするためにはどっか別に固定領域を確保してそっからデータ持ってくるようにしないと
ダメでしょうか?

366 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 14:40:08.17 ID:C2mmH5Le]
はい

367 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 18:04:47.26 ID:22vat4md]
いえ、してますよ
マークアンドスイープ方式のガベージコレクションをしてないだけで



368 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 18:34:47.65 ID:0kbQZJFE]
フラグメンテーションとGC直接関係ないし

369 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 19:11:45.23 ID:XxVOSZ3z]
コンパクション(メモリのデフラグ)も行うコピーGCのことを言っているんじゃないかと
しかし、時代はGCじゃないよねぇ。時代は参照カウントだよ。
C++11でも、shared_ptrが追加されたし。
シンタックスがどんどん汚くなっていくのはC++の悲しいところだな。

370 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 19:24:03.99 ID:Ey7XFEeM]
>時代は参照カウントだよ

へー、そいつは凄いな

371 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 22:59:26.61 ID:Y26C2d1q]
そういや、shared_ptr ってオブジェクトレベルでマルチスレッド対応してるんかな?

372 名前:デフォルトの名無しさん [2015/01/06(火) 23:01:02.23 ID:a1JT3SDg]
>>242
遅くなりましたがあなたのお陰で解決しました。ありがとうございます!

373 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 23:11:59.71 ID:Z2lMmRuz]
>>371
標準ライブラリは「constメンバ関数=マルチスレッド対応」で統一していたはずだが

374 名前:デフォルトの名無しさん mailto:sage [2015/01/06(火) 23:53:02.99 ID:kiKfNKwr]
>>369
シンタックスそんなに汚いかなあ、C++11

375 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 00:17:19.84 ID:Y9yyLQNc]
>>373
じゃあ、コピーコンストラクタや代入演算子はダメなのかねー。
スマポの魅力半減。
昔、参照カウンタ方式のstringでエライ痛い目みたからなー…

376 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 00:20:45.94 ID:A8Vu2ukb]
>>375
代入はだめだろ
けどコピーコンストラクタは、仮にもコンストラクタだし、オブジェクトを構築してるスレッド以外から手の触れようがないと思うが

377 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 00:23:58.83 ID:J9Js0gVS]
shared_ptr自体はマルチスレッドに対応してるだろ
マルチスレッドでどれだけ参照を増やそうが減らそうがdeleteされなかったり2重deleteしたりしない



378 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 07:10:13.57 ID:Re9e7Fnn]
それは君の環境で「自分で同期したら問題なく動いた」ってだけでは?

379 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 09:05:13.51 ID:DkZd7T6D]
異なるshared_ptrに対する操作ならデータ競合を起こさないことが保証されてるよ
ttp://faithandbrave.hateblo.jp/entry/20130328/1364463249


同じshared_ptrに対する更新などの操作をデータ競合を発生させずに行うためのものも提供されてる
ttp://en.cppreference.com/w/cpp/memory/shared_ptr/atomic

380 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 09:13:45.90 ID:v+HQiVT1]
WinのInterlickedExchage関数, QtのQAtomicIntみたいなもんか

型がTなのでより進化してるけど

381 名前:デフォルトの名無しさん mailto:sage [2015/01/07(水) 13:47:42.98 ID:rq5tkzs4]
>>379
それと所有するオブジェクト自体を複数のスレッドから操作する場合はmutexが必要になると。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<90KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef