C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part150
https://mevius.5ch.net/test/read.cgi/tech/1584975873/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
テンプレここまで
探検
C++相談室 part151
■ このスレッドは過去ログ倉庫に格納されています
2020/05/14(木) 11:53:25.59ID:ZPCfyTux
2020/05/22(金) 17:40:03.05ID:Wrt3y1wd
[&]{
std::vector<int> ret(v.size());
std::transform(v.begin(),v.end(),ret.begin(),[](A d){return d.i;});
return ret;
}
std::vector<int> ret(v.size());
std::transform(v.begin(),v.end(),ret.begin(),[](A d){return d.i;});
return ret;
}
2020/05/22(金) 17:42:50.71ID:Wrt3y1wd
[](A){...}
のところは&A::iでもいいかな
のところは&A::iでもいいかな
92デフォルトの名無しさん
2020/05/22(金) 17:44:13.14ID:Czx4JK5B2020/05/22(金) 17:59:27.93ID:Sp8oG6pc
なるほど、std::transformを使うのですね
Pythonみたいにサクッとできたらよかったのですが、ちょっとイメージと違いました
ラムダ式に変な期待、というか勘違いしてました
素直にrange for文で個々にemplace_backするほうが短いし分かりやすいので、今回はそうします
ありがとうございました
Pythonみたいにサクッとできたらよかったのですが、ちょっとイメージと違いました
ラムダ式に変な期待、というか勘違いしてました
素直にrange for文で個々にemplace_backするほうが短いし分かりやすいので、今回はそうします
ありがとうございました
2020/05/22(金) 18:03:14.33ID:Wrt3y1wd
pythonだと[d.i for d in v]って所か?
lambdaじゃないけど
lambdaじゃないけど
2020/05/22(金) 18:08:11.35ID:UA0IlUzi
内包表記だな
2020/05/22(金) 19:08:51.35ID:TUWJypw2
97はちみつ餃子 ◆8X2XSCHEME
2020/05/23(土) 00:02:55.12ID:jzsRlJtI range を使えば楽だろうと思ったんだけど view からコンテナに変換する関数は C++20 には入らなかったの?
Range-v3 にある to みたいなやつ。
https://ericniebler.github.io/range-v3/group__group-range.html#ga555b843264809e3765210c42a66d3c3b
Range-v3 にある to みたいなやつ。
https://ericniebler.github.io/range-v3/group__group-range.html#ga555b843264809e3765210c42a66d3c3b
2020/05/23(土) 20:12:53.91ID:Ze0+o2k4
>>87
diva danceみたいに?
diva danceみたいに?
2020/05/27(水) 17:21:37.04ID:UmTuuMOr
gdbのプロンプトでsqrtとかabsみたいな数学の関数使えないんだけど使えるようにする方法ある?
100デフォルトの名無しさん
2020/05/27(水) 17:25:22.27ID:CVgHI0+a さぁ
101デフォルトの名無しさん
2020/05/27(水) 17:52:37.65ID:y56ZMEX8 毎回生成したくない大きめな作業用配列とかって結局どこに持っとくのが良いの?
メンバ変数として?
グローバル変数として?
メンバ変数として?
グローバル変数として?
102デフォルトの名無しさん
2020/05/27(水) 18:36:53.07ID:IG528ewY そんなことで悩むレベルなら毎回生成しろ
たぶんそんなことでは全く遅くはならん
たぶんそんなことでは全く遅くはならん
103デフォルトの名無しさん
2020/05/27(水) 19:02:42.55ID:8V/LyVfK なるべく使う奴にしか見えないスコープに閉じ込めるんだよ
bool1個だろうと10GBの配列だろうと一緒
基本を守るだけだ
bool1個だろうと10GBの配列だろうと一緒
基本を守るだけだ
104デフォルトの名無しさん
2020/05/27(水) 19:50:08.92ID:9+VJvnQZ >>99
$ gdb some_program
(gdb) break main
(gdb) run
(gdb) print ((double(*)(double))sqrt)(2.0)
って感じで使えないかな。
たぶん some_program は何らか libm の関数を取り込んでないとダメだけど。
$ gdb some_program
(gdb) break main
(gdb) run
(gdb) print ((double(*)(double))sqrt)(2.0)
って感じで使えないかな。
たぶん some_program は何らか libm の関数を取り込んでないとダメだけど。
105デフォルトの名無しさん
2020/05/27(水) 20:25:14.60ID:UmTuuMOr106デフォルトの名無しさん
2020/05/27(水) 20:35:36.86ID:8D/pm3yR 作業用の領域の扱いってたしかにいつも悩むんだが、
*) ループや関数の内側で毎回コンテナ (vector, set, queue, etc...) を宣言し、初期化し、使う
と
*) ループや関数の外側にコンテナを宣言しておき、ループや関数の内側で初期化し、使う
だと当然後者の方が低コストで、可読性を大きく損なわない限り後者の方が良いのだよな?
初期化の計算量のオーダーは両者とも同じだが、可変長コンテナのメモリアロケーションの回数を少なくするのが重要だと思って良いのだよな?
*) ループや関数の内側で毎回コンテナ (vector, set, queue, etc...) を宣言し、初期化し、使う
と
*) ループや関数の外側にコンテナを宣言しておき、ループや関数の内側で初期化し、使う
だと当然後者の方が低コストで、可読性を大きく損なわない限り後者の方が良いのだよな?
初期化の計算量のオーダーは両者とも同じだが、可変長コンテナのメモリアロケーションの回数を少なくするのが重要だと思って良いのだよな?
107デフォルトの名無しさん
2020/05/27(水) 20:37:48.66ID:8D/pm3yR もう一個質問
STLコンテナの初期化は空とのswapでやったりすると思うが、この場合コンテナが置かれたメモリの場所は変わらんよな?
つまり、余計なメモリアロケーションは起こらんよな?
STLコンテナの初期化は空とのswapでやったりすると思うが、この場合コンテナが置かれたメモリの場所は変わらんよな?
つまり、余計なメモリアロケーションは起こらんよな?
108デフォルトの名無しさん
2020/05/27(水) 20:45:00.53ID:fWbzFAkP なんかイラっときた
109デフォルトの名無しさん
2020/05/27(水) 20:50:33.85ID:CVgHI0+a なぜ同意を求める?
部下に相槌を打つようにいつも説得しているのか?
お願いします
教えてください
も言えんのか
部下に相槌を打つようにいつも説得しているのか?
お願いします
教えてください
も言えんのか
110デフォルトの名無しさん
2020/05/27(水) 21:47:27.96ID:HrRUxTGO 行単位でファイルを読み込んだあと、パースするような処理で巨大なテキストファイルを扱う場合だと、顕著に後者が速くなる
まあ一度プロファイラで確認してみればいいよ
まあ一度プロファイラで確認してみればいいよ
111はちみつ餃子 ◆8X2XSCHEME
2020/05/27(水) 23:11:34.31ID:OEK6SyHu112デフォルトの名無しさん
2020/05/27(水) 23:13:55.80ID:CVgHI0+a 要素のswapってなんだ?
再配置だろ
再配置だろ
113はちみつ餃子 ◆8X2XSCHEME
2020/05/27(水) 23:26:27.55ID:OEK6SyHu114デフォルトの名無しさん
2020/05/27(水) 23:50:44.02ID:HrRUxTGO 単にgetlineした文字列を
vectorに詰める場合、
getlineしたバッファをmove push_backしたり、shrink_to_fitしてmove
push_backするより、何もせずpush_backでコピーを詰め込んでバッファを使い回しってのが一番速くてメモリ効率もよく、コードもスッキリする
vectorに詰める場合、
getlineしたバッファをmove push_backしたり、shrink_to_fitしてmove
push_backするより、何もせずpush_backでコピーを詰め込んでバッファを使い回しってのが一番速くてメモリ効率もよく、コードもスッキリする
115デフォルトの名無しさん
2020/05/28(木) 00:31:33.05ID:deInkrVp そりゃそうだ
116デフォルトの名無しさん
2020/05/28(木) 05:51:39.46ID:CImYg+b8117デフォルトの名無しさん
2020/05/28(木) 17:31:30.53ID:FcJ3hVy7 Promiseってなんでわざわざfutureを作ってあげなきゃいけないのです?
思想的な話なの?
思想的な話なの?
118デフォルトの名無しさん
2020/05/28(木) 20:27:31.11ID:MpYk07ZW Nowなyoungにバカ受け
119デフォルトの名無しさん
2020/05/28(木) 22:23:48.94ID:deInkrVp 約束ってのは将来果たすためのものだからだよ
120デフォルトの名無しさん
2020/05/29(金) 08:16:47.57ID:eRAtimlp このネーミングセンスには禿も苦笑してたな
121デフォルトの名無しさん
2020/05/29(金) 10:12:51.28ID:pukUYLjc ビャーネ御大と江添のどっちだよ!
122デフォルトの名無しさん
2020/05/31(日) 08:42:17.14ID:iKoRaPmL STLのsetで重複したノードの登録を除外する方法がわかりません
整列基準とするint key1,key2,key3の値にかかわらず、POINT positionが重複する値だったら除外したいのですが、意図した動作になりません
例えば(0,0),(0,1),(1,0),(1,1)の4パターンのみで同一パターンは除外されるようにしたいのに20パターン以上重複して登録されてしまいます
setについてご存知の方いらっしゃいましたらご教示願います
#include <set>
#include <time.h>
#include <windows.h>
using namespace std;
bool operator ==(const POINT& inA, const POINT& inB){ return (inA.x==inB.x)&&(inA.y==inB.y); }
整列基準とするint key1,key2,key3の値にかかわらず、POINT positionが重複する値だったら除外したいのですが、意図した動作になりません
例えば(0,0),(0,1),(1,0),(1,1)の4パターンのみで同一パターンは除外されるようにしたいのに20パターン以上重複して登録されてしまいます
setについてご存知の方いらっしゃいましたらご教示願います
#include <set>
#include <time.h>
#include <windows.h>
using namespace std;
bool operator ==(const POINT& inA, const POINT& inB){ return (inA.x==inB.x)&&(inA.y==inB.y); }
123デフォルトの名無しさん
2020/05/31(日) 08:42:47.02ID:iKoRaPmL //setに入れる要素
class CNode
{
public:
POINT position;
int key1;
int key2;
int key3;
CNode()
{
position.x=rand()%2;
position.y=rand()%2;
key1=rand()%3;
key2=rand()%5;
key3=rand()%10;
}
//setに入れるCNodeポインタを整列する基準を定義
inline bool operator()(const CNode* a, const CNode* b) const
{
//positionの値が同じ要素はsetに登録しない
bool same = (a->position == b->position);
if( same ) return false;
//↑このあたりが怪しい? ここでfalseを返すと登録数が期待よりも多過ぎ、何も返さないと期待よりも少なくなる
//キーでの整列用
if(a->key1 != b->key1) return a->key1 > b->key1;
if(a->key2 != b->key2) return a->key2 > b->key2;
if(a->key3 != b->key3) return a->key3 > b->key3;
return false;
}
};
class CNode
{
public:
POINT position;
int key1;
int key2;
int key3;
CNode()
{
position.x=rand()%2;
position.y=rand()%2;
key1=rand()%3;
key2=rand()%5;
key3=rand()%10;
}
//setに入れるCNodeポインタを整列する基準を定義
inline bool operator()(const CNode* a, const CNode* b) const
{
//positionの値が同じ要素はsetに登録しない
bool same = (a->position == b->position);
if( same ) return false;
//↑このあたりが怪しい? ここでfalseを返すと登録数が期待よりも多過ぎ、何も返さないと期待よりも少なくなる
//キーでの整列用
if(a->key1 != b->key1) return a->key1 > b->key1;
if(a->key2 != b->key2) return a->key2 > b->key2;
if(a->key3 != b->key3) return a->key3 > b->key3;
return false;
}
};
124デフォルトの名無しさん
2020/05/31(日) 08:43:16.96ID:iKoRaPmL typedef set<CNode*, CNode> NODE_POINTER_SET;
int main()
{
srand((unsigned)time(NULL));
int NUM=100;
printf("setへの登録候補数:%d\n",NUM);
CNode* dammy[1];
NODE_POINTER_SET NodePointerSet(dammy, dammy+0, CNode());
CNode* node;
for(int i=0; i<NUM; i++)
{
node = new CNode();
printf("%x:(%d,%d)【%3d %3d %3d】をセットへ\n"
,node
,node->position.x, node->position.y
,node->key1, node->key2, node->key3 );
pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet.insert(node); //setへ登録
if( false == insert_result.second ) delete node; //重複で登録できなかった場合は確保したメモリを破棄
}
printf("\nset内に登録された要素数:%d\n",NodePointerSet.size());
for(NODE_POINTER_SET::const_iterator it=NodePointerSet.begin(); it!=NodePointerSet.end(); )
{
printf("%x:(%d,%d)【%3d %3d %3d】をセットから\n"
,*it
,(*it)->position.x, (*it)->position.y
,(*it)->key1, (*it)->key2, (*it)->key3 );
delete (*it); //メモリの後始末
it=NodePointerSet.erase(it); //setから削除 itは次の要素を指す
}
}
int main()
{
srand((unsigned)time(NULL));
int NUM=100;
printf("setへの登録候補数:%d\n",NUM);
CNode* dammy[1];
NODE_POINTER_SET NodePointerSet(dammy, dammy+0, CNode());
CNode* node;
for(int i=0; i<NUM; i++)
{
node = new CNode();
printf("%x:(%d,%d)【%3d %3d %3d】をセットへ\n"
,node
,node->position.x, node->position.y
,node->key1, node->key2, node->key3 );
pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet.insert(node); //setへ登録
if( false == insert_result.second ) delete node; //重複で登録できなかった場合は確保したメモリを破棄
}
printf("\nset内に登録された要素数:%d\n",NodePointerSet.size());
for(NODE_POINTER_SET::const_iterator it=NodePointerSet.begin(); it!=NodePointerSet.end(); )
{
printf("%x:(%d,%d)【%3d %3d %3d】をセットから\n"
,*it
,(*it)->position.x, (*it)->position.y
,(*it)->key1, (*it)->key2, (*it)->key3 );
delete (*it); //メモリの後始末
it=NodePointerSet.erase(it); //setから削除 itは次の要素を指す
}
}
125蟻人間 ◆T6xkBnTXz7B0
2020/05/31(日) 08:47:50.96ID:KExNe49d std::setの整列はlessでstd::unordered_setは整列せずでequalだったと思う。
たぶん近藤してる。
たぶん近藤してる。
126蟻人間 ◆T6xkBnTXz7B0
2020/05/31(日) 08:55:43.87ID:KExNe49d スマポ使わずにdelete使うのは古いよ。
127デフォルトの名無しさん
2020/05/31(日) 09:07:29.52ID:iKoRaPmL >>125
すみません、もう少し詳しくお教え頂けないでしょうか
初心者で見よう見まねでやっているので…
整列はできているのですが、除外がうまく動かないかんじです
スマートポインタは、難しそうなので私にはまだ早いと思っています
(でも、そのうち取り組みたい)
すみません、もう少し詳しくお教え頂けないでしょうか
初心者で見よう見まねでやっているので…
整列はできているのですが、除外がうまく動かないかんじです
スマートポインタは、難しそうなので私にはまだ早いと思っています
(でも、そのうち取り組みたい)
128蟻人間 ◆T6xkBnTXz7B0
2020/05/31(日) 09:13:01.00ID:KExNe49d std::setとstd::unordered_setの規格票を参照。テンプレート引数の最初は値。その次の引数は比較になっている。比較だけど、その比較はequalかlessなのかが問題だ。
lessというのは、不等号で書くと<。
equalというのは、==という意味。
lessというのは、不等号で書くと<。
equalというのは、==という意味。
129デフォルトの名無しさん
2020/05/31(日) 09:41:05.74ID:TtXgrlrn >>127
最初は見よう見まねなのは仕方ないけど、関数の仕様を解説してるページを探して仕様を確認する癖をつけるといいぞ。
最初は見よう見まねなのは仕方ないけど、関数の仕様を解説してるページを探して仕様を確認する癖をつけるといいぞ。
130デフォルトの名無しさん
2020/05/31(日) 09:48:26.67ID:zTMn2qwy まずstd::setについて調べると
https://cpprefjp.github.io/reference/set/set.html
Compareは狭義の弱順序において前ならtrueとある
狭義の弱順序のリンクをたどると
https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering
!comp(a, b) && !comp(b, a) として equiv(a, b) を定義する場合、
equiv(a, b) && equiv(b, c) は equiv(a, c) を意味する必要があると書いてある。
あなたの作った比較関数は、この条件を満たさない。
{{0,0},0,0,0}=={{0,1},0,0,0}=={0,1},0,0,1}だが、{{0,0},0,0,0}!={0,1},0,0,1}となってしまう。
https://cpprefjp.github.io/reference/set/set.html
Compareは狭義の弱順序において前ならtrueとある
狭義の弱順序のリンクをたどると
https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering
!comp(a, b) && !comp(b, a) として equiv(a, b) を定義する場合、
equiv(a, b) && equiv(b, c) は equiv(a, c) を意味する必要があると書いてある。
あなたの作った比較関数は、この条件を満たさない。
{{0,0},0,0,0}=={{0,1},0,0,0}=={0,1},0,0,1}だが、{{0,0},0,0,0}!={0,1},0,0,1}となってしまう。
131デフォルトの名無しさん
2020/05/31(日) 10:48:27.53ID:zTMn2qwy もう少しざっくりとした説明。
setは、ソートした後に、等しい要素が隣同士に並ぶことを前提としている。
これにより、隣り合った要素とだけ重複判定することで効率化している。
しかし、問題の比較関数でソートしても、等しい要素が隣同士に並ぶとは限らない。
{{0,1},0,0,6}, {{0,3},0,0,4}, {{0,1},0,0,2}
のような要素列を、この比較関数でソートしても、順序は変わらない。
先頭と末尾が等しいはずなのに隣り合っていないため、重複判定が行われない。
setは、ソートした後に、等しい要素が隣同士に並ぶことを前提としている。
これにより、隣り合った要素とだけ重複判定することで効率化している。
しかし、問題の比較関数でソートしても、等しい要素が隣同士に並ぶとは限らない。
{{0,1},0,0,6}, {{0,3},0,0,4}, {{0,1},0,0,2}
のような要素列を、この比較関数でソートしても、順序は変わらない。
先頭と末尾が等しいはずなのに隣り合っていないため、重複判定が行われない。
132デフォルトの名無しさん
2020/05/31(日) 11:51:01.53ID:iKoRaPmL 難しいですね…
つまり
//positionの値が同じ要素はsetに登録しない
bool same = (a->position == b->position);
if( same ) return false;
のところをどう書き直したら動くのでしょうか?
どうか教えて下さい
m(_ _)mこのとおり!
つまり
//positionの値が同じ要素はsetに登録しない
bool same = (a->position == b->position);
if( same ) return false;
のところをどう書き直したら動くのでしょうか?
どうか教えて下さい
m(_ _)mこのとおり!
133デフォルトの名無しさん
2020/05/31(日) 11:53:09.13ID:27DcnLkI 弱順序とか区分化とかあの説明だけで理解できたら天才だろ
だから群論・集合論の教科書を数冊読むとC++がスラスラと理解できるようになる
だから群論・集合論の教科書を数冊読むとC++がスラスラと理解できるようになる
134デフォルトの名無しさん
2020/05/31(日) 11:53:23.87ID:J1D5Z9UC 自分でやる気がない人に教える気にはならないなぁ。
135デフォルトの名無しさん
2020/05/31(日) 12:02:25.63ID:6nfzU/vT bool CNode::operator<(const CNode& rhs) const {
if (key1 != rhs.key1) { return (key1 < rhs.key1); }
else if (key2 != rhs.key2) { return (key2 < rhs.key2); }
else if (key3 != rhs.key3) { return (key3 < rhs.key3); }
else { return false; }
}
を実装したら最低限逝ける、
等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる
関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される
ただしそれでは効率が悪いので(「==」1回につきoperator<()が2回呼ばれるので)、
「==」も手動で実装したらモアベターではある
if (key1 != rhs.key1) { return (key1 < rhs.key1); }
else if (key2 != rhs.key2) { return (key2 < rhs.key2); }
else if (key3 != rhs.key3) { return (key3 < rhs.key3); }
else { return false; }
}
を実装したら最低限逝ける、
等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる
関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される
ただしそれでは効率が悪いので(「==」1回につきoperator<()が2回呼ばれるので)、
「==」も手動で実装したらモアベターではある
136デフォルトの名無しさん
2020/05/31(日) 12:12:06.34ID:zTMn2qwy137デフォルトの名無しさん
2020/05/31(日) 12:25:20.78ID:HQ8vNkm/ そもそもCNodeにoperator<実装してないのになんでコンパイル通ってんのか謎
隠してるコードがあるなら全部出せ
隠してるコードがあるなら全部出せ
138デフォルトの名無しさん
2020/05/31(日) 12:45:05.74ID:J1D5Z9UC >>137
> typedef set<CNode*, CNode> NODE_POINTER_SET;
> typedef set<CNode*, CNode> NODE_POINTER_SET;
139蟻人間 ◆T6xkBnTXz7B0
2020/05/31(日) 12:51:20.01ID:KExNe49d inline bool operator()(const CNode* a, const CNode* b) const
{
if(a->key1 < b->key1) return true;
if(a->key1 > b->key1) return false;
if(a->key2 < b->key2) return true;
if(a->key2 > b->key2) return false;
if(a->key3 < b->key3) return true;
if(a->key3 > b->key3) return false;
//ここまでヒント。
}
{
if(a->key1 < b->key1) return true;
if(a->key1 > b->key1) return false;
if(a->key2 < b->key2) return true;
if(a->key2 > b->key2) return false;
if(a->key3 < b->key3) return true;
if(a->key3 > b->key3) return false;
//ここまでヒント。
}
140デフォルトの名無しさん
2020/05/31(日) 12:58:31.73ID:6nfzU/vT >//positionの値が同じ要素はsetに登録しない
>bool same = (a->position == b->position);
>if( same ) return false;
仕様誤解してたサーセンgrz、、
>bool same = (a->position == b->position);
>if( same ) return false;
仕様誤解してたサーセンgrz、、
141デフォルトの名無しさん
2020/05/31(日) 13:17:45.26ID:iKoRaPmL 皆様ありがとうございます
>>135
なるほど、<が2回呼ばれるのですか(いろいろ試していて2回ずつカウントされているのを不思議に思ってました)
ご紹介頂いたコードを追加しましたが、rhsがポインタでないせいか効果がありませんでした
ポインタを、そのメンバ変数基準で整列させたいのですが、
bool operator<(const CNode* lhs, const CNode* rhs)const
で定義しようとするとコンパイルエラーC2804
binary 'operator <' に引数が多すぎます。
になってしまいます
==演算子も同様に駄目でした
<や==演算子オーバーロードでポインタを整列させる事は無理なのでしょうか?
>>140
の内容からすると、無理なのかな?
(自分で試してみて無理そうだと思ったので、仕方なく()オーバーロードで定義を書いていました)
>>139
ヒント見ても理解できないこの無能な鈍物めにお答えを賜りたく
どうかお願いします!
>>135
なるほど、<が2回呼ばれるのですか(いろいろ試していて2回ずつカウントされているのを不思議に思ってました)
ご紹介頂いたコードを追加しましたが、rhsがポインタでないせいか効果がありませんでした
ポインタを、そのメンバ変数基準で整列させたいのですが、
bool operator<(const CNode* lhs, const CNode* rhs)const
で定義しようとするとコンパイルエラーC2804
binary 'operator <' に引数が多すぎます。
になってしまいます
==演算子も同様に駄目でした
<や==演算子オーバーロードでポインタを整列させる事は無理なのでしょうか?
>>140
の内容からすると、無理なのかな?
(自分で試してみて無理そうだと思ったので、仕方なく()オーバーロードで定義を書いていました)
>>139
ヒント見ても理解できないこの無能な鈍物めにお答えを賜りたく
どうかお願いします!
142デフォルトの名無しさん
2020/05/31(日) 13:48:52.93ID:J1D5Z9UC >>122
> 整列基準とするint key1,key2,key3の値にかかわらず、POINT positionが重複する値だったら除外したい
これ要求に間違いが無いなら、独立した比較基準(整列用と重複判定用)が2つあることになるので、
単一の比較関数(およびset)で解決しようとしてるのが間違いかな。
> 整列基準とするint key1,key2,key3の値にかかわらず、POINT positionが重複する値だったら除外したい
これ要求に間違いが無いなら、独立した比較基準(整列用と重複判定用)が2つあることになるので、
単一の比較関数(およびset)で解決しようとしてるのが間違いかな。
143デフォルトの名無しさん
2020/05/31(日) 13:58:58.98ID:27DcnLkI △ ヒント
○ これ以上は分かりませんでしたがMOTTAINAIので貼ります
○ これ以上は分かりませんでしたがMOTTAINAIので貼ります
144デフォルトの名無しさん
2020/05/31(日) 14:31:43.92ID:iKoRaPmL 簡単に出来そうだと思っていた事が、結構な難問だったようですね…
自分の力では無理そうだという事がわかっただけでも収穫でした
皆様ありがとうございました
自分の力では無理そうだという事がわかっただけでも収穫でした
皆様ありがとうございました
145デフォルトの名無しさん
2020/05/31(日) 14:33:26.01ID:6nfzU/vT 回答を示す、
1. 「<」と「==」演算子をグローバルな関数として定義する版:
https://ideone.com/Qdi402
2. 「<」と「==」演算子をクラスのメソッドとして定義する版:
https://ideone.com/3JTyiJ
3. (参考)スマポ版
https://ideone.com/bYOWcR
元のコードはいきなりinsertしようとしているがinsertの動作はinsertしてから重複だったかどうか返すというものなので、
生ポインタ版である1と2では事前にfindしている
3は事前findが不要で本来のコードとなったが、動作は後優先(先にinsertしたaと、後からinsertしたbがsameの場合、aが削除され、bが残る。)
1. 「<」と「==」演算子をグローバルな関数として定義する版:
https://ideone.com/Qdi402
2. 「<」と「==」演算子をクラスのメソッドとして定義する版:
https://ideone.com/3JTyiJ
3. (参考)スマポ版
https://ideone.com/bYOWcR
元のコードはいきなりinsertしようとしているがinsertの動作はinsertしてから重複だったかどうか返すというものなので、
生ポインタ版である1と2では事前にfindしている
3は事前findが不要で本来のコードとなったが、動作は後優先(先にinsertしたaと、後からinsertしたbがsameの場合、aが削除され、bが残る。)
146デフォルトの名無しさん
2020/05/31(日) 14:40:09.33ID:J1D5Z9UC147デフォルトの名無しさん
2020/05/31(日) 15:24:55.05ID:6nfzU/vT >>146
> > insertの動作はinsertしてから重複だったかどうか返すというもの
> 要出展
仕様誤解してたサーセンgrz、、
と言うわけで>>145のソースコードは以下の通り訂正汁、
1のソースコード ==> https://ideone.com/uRTmmo
2のソースコード ==> https://ideone.com/EdndM1
3のソースコード ==> https://ideone.com/UYMN5D
(3は間違ったコメントを削除、およびアドレスの表示の誤りを訂正)
> > 等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる
> > 関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される
> 要出典
しらそん;;
テンプレートの定義とC++の言語仕様とかstd::rel_opsの存在意義とか想像したらワカル
> > insertの動作はinsertしてから重複だったかどうか返すというもの
> 要出展
仕様誤解してたサーセンgrz、、
と言うわけで>>145のソースコードは以下の通り訂正汁、
1のソースコード ==> https://ideone.com/uRTmmo
2のソースコード ==> https://ideone.com/EdndM1
3のソースコード ==> https://ideone.com/UYMN5D
(3は間違ったコメントを削除、およびアドレスの表示の誤りを訂正)
> > 等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる
> > 関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される
> 要出典
しらそん;;
テンプレートの定義とC++の言語仕様とかstd::rel_opsの存在意義とか想像したらワカル
148デフォルトの名無しさん
2020/05/31(日) 15:28:53.38ID:xFqcIaF1 C++は美しい
bool operator <(const POINT& inA, const POINT& inB){
int rA2 = ( inA.x * inA.x + inA.y * inA.y );
int rB2 = ( inB.x * inB.x + inB.y * inB.y );
return ( ( rA2 < rB2 ) || ( ( rA2 == rB2 ) && ( inA.y < inB.y ) ) );
}
inline bool operator()(const CNode* a, const CNode* b) const{
if(a->key1 != b->key1) return a->key1 > b->key1;
if(a->key2 != b->key2) return a->key2 > b->key2;
if(a->key3 != b->key3) return a->key3 > b->key3;
return false;
}
NODE_POINTER_SET NodePointerSet2(dammy, dammy+0, CNode());
for(int i=0; i<NUM; i++){
node = new CNode();
pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet2.insert(node); //setへ登録
if( false == insert_result.second ) delete node; //重複で登録できなかった場合は確保したメモリを破棄
}
std::map<POINT, CNode*> mp;
for(NODE_POINTER_SET::const_iterator it=NodePointerSet2.begin(); it!=NodePointerSet2.end(); it++ ){
if( !mp[(*it)->position] ){
mp[(*it)->position] = (*it);
pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet.insert((*it)); //setへ登録
}
}
bool operator <(const POINT& inA, const POINT& inB){
int rA2 = ( inA.x * inA.x + inA.y * inA.y );
int rB2 = ( inB.x * inB.x + inB.y * inB.y );
return ( ( rA2 < rB2 ) || ( ( rA2 == rB2 ) && ( inA.y < inB.y ) ) );
}
inline bool operator()(const CNode* a, const CNode* b) const{
if(a->key1 != b->key1) return a->key1 > b->key1;
if(a->key2 != b->key2) return a->key2 > b->key2;
if(a->key3 != b->key3) return a->key3 > b->key3;
return false;
}
NODE_POINTER_SET NodePointerSet2(dammy, dammy+0, CNode());
for(int i=0; i<NUM; i++){
node = new CNode();
pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet2.insert(node); //setへ登録
if( false == insert_result.second ) delete node; //重複で登録できなかった場合は確保したメモリを破棄
}
std::map<POINT, CNode*> mp;
for(NODE_POINTER_SET::const_iterator it=NodePointerSet2.begin(); it!=NodePointerSet2.end(); it++ ){
if( !mp[(*it)->position] ){
mp[(*it)->position] = (*it);
pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet.insert((*it)); //setへ登録
}
}
149デフォルトの名無しさん
2020/05/31(日) 15:41:55.39ID:J1D5Z9UC150デフォルトの名無しさん
2020/05/31(日) 16:08:01.03ID:HQ8vNkm/ setの重複排除条件をコントロールしたいだけなら
std::(unordered_)setのPredテンプレート引数で制御すればいいだけの話じゃないの?
からかって遊んでるだけ?
std::(unordered_)setのPredテンプレート引数で制御すればいいだけの話じゃないの?
からかって遊んでるだけ?
151デフォルトの名無しさん
2020/05/31(日) 16:37:00.29ID:zTMn2qwy positionによる重複削除だけでなく、key1〜3によるソートと重複削除も必要だから
単純に順番にやるだけだと、余計な要素まで消えてしまう。
{{0,0},0,0,0},{{0,0},0,0,1},{{0,1},0,0,0}
みたいなデータがあった場合、単純にpositionによる重複削除を先に実施してしまうと
{{0,0},0,0,0},{{0,1},0,0,0}
みたいになって、そこからkey1〜3によるソートと重複削除を行うと
{{0,0},0,0,0}
だけになってしまう。逆順でも同様の問題がある。
単純に順番にやるだけだと、余計な要素まで消えてしまう。
{{0,0},0,0,0},{{0,0},0,0,1},{{0,1},0,0,0}
みたいなデータがあった場合、単純にpositionによる重複削除を先に実施してしまうと
{{0,0},0,0,0},{{0,1},0,0,0}
みたいになって、そこからkey1〜3によるソートと重複削除を行うと
{{0,0},0,0,0}
だけになってしまう。逆順でも同様の問題がある。
152デフォルトの名無しさん
2020/05/31(日) 16:47:23.53ID:HQ8vNkm/ その隠し要件どこに書いてるの?もしそれが必要なら横着せずに全部持っておくしかないね
153デフォルトの名無しさん
2020/05/31(日) 17:24:57.13ID:zTMn2qwy 書いてるところはない。すまん。
154122
2020/06/01(月) 08:41:58.41ID:VTbJvOd1 すみません仕様間違えていました
>positionによる重複削除だけでなく、key1〜3によるソートと重複削除も必要
ではなく
positionによる重複削除だけでなく、key1〜3によるソートも必要
で、key1〜3が全部同じでもpositionが異なれば重複削除はしないという仕様が正しかったです
なので
>>148さんが書いて下さったコードを追加して、
if(a->key1 != b->key1) return a->key1 > b->key1;
if(a->key2 != b->key2) return a->key2 > b->key2;
if(a->key3 != b->key3) return a->key3 > b->key3;
return true;//ここをfalseではなくtrueに変更
にしたら、期待どおりの動作をしました
148さん本当にありがとうございます!とても助かりました
147さんもありがとうございます
>positionによる重複削除だけでなく、key1〜3によるソートと重複削除も必要
ではなく
positionによる重複削除だけでなく、key1〜3によるソートも必要
で、key1〜3が全部同じでもpositionが異なれば重複削除はしないという仕様が正しかったです
なので
>>148さんが書いて下さったコードを追加して、
if(a->key1 != b->key1) return a->key1 > b->key1;
if(a->key2 != b->key2) return a->key2 > b->key2;
if(a->key3 != b->key3) return a->key3 > b->key3;
return true;//ここをfalseではなくtrueに変更
にしたら、期待どおりの動作をしました
148さん本当にありがとうございます!とても助かりました
147さんもありがとうございます
155デフォルトの名無しさん
2020/06/01(月) 08:53:47.81ID:idPskxLG >>154
> return true;//ここをfalseではなくtrueに変更
明らかに違反してるじゃねーの?
https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering
> 「狭義 (strict) 」 は非反射関係 (irreflexive relation) (全ての x について !comp(x,x) である)の要求
> return true;//ここをfalseではなくtrueに変更
明らかに違反してるじゃねーの?
https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering
> 「狭義 (strict) 」 は非反射関係 (irreflexive relation) (全ての x について !comp(x,x) である)の要求
156デフォルトの名無しさん
2020/06/01(月) 09:14:14.95ID:VTbJvOd1 難しい事はわかりませんが、
動作検証が足りてないかんじでしょうか
もし駄目だったら、諦めて別の方法を考えようと思います
動作検証が足りてないかんじでしょうか
もし駄目だったら、諦めて別の方法を考えようと思います
157デフォルトの名無しさん
2020/06/01(月) 14:34:32.60ID:o7IiynR8 double *array1;
array1 = new double[count]();
と書いた場合の、[count] の後ろの () の意味は何でしょうか?
array1 = new double[count];
と書いた場合との違いは何でしょうか?
()の中に何か書くことは出来ますか?
array1 = new double[count]();
と書いた場合の、[count] の後ろの () の意味は何でしょうか?
array1 = new double[count];
と書いた場合との違いは何でしょうか?
()の中に何か書くことは出来ますか?
158はちみつ餃子 ◆8X2XSCHEME
2020/06/01(月) 15:11:25.75ID:0yVOdbpz >>157
内容を初期化するかどうか。
普通のクラスでは括弧がなくてもデフォルトコンストラクタで初期化されるので
空の括弧があってもなくても意味はかわらないけど、
プリミティブな型などでは括弧無しのときは初期化しない。 (つまり内容は不定)
括弧があればゼロで初期化されることが保証される。
C++14 あたりからはこんな感じで初期化することもできるよ。
double *array1 = new double[]{1,2,3};
内容を初期化するかどうか。
普通のクラスでは括弧がなくてもデフォルトコンストラクタで初期化されるので
空の括弧があってもなくても意味はかわらないけど、
プリミティブな型などでは括弧無しのときは初期化しない。 (つまり内容は不定)
括弧があればゼロで初期化されることが保証される。
C++14 あたりからはこんな感じで初期化することもできるよ。
double *array1 = new double[]{1,2,3};
159デフォルトの名無しさん
2020/06/01(月) 15:34:55.48ID:o7IiynR8 >>158
をー。有難う。
をー。有難う。
160デフォルトの名無しさん
2020/06/01(月) 18:12:14.25ID:8BAaT/q7 昔はよく{0}って書いてたというか書けなかったな
161デフォルトの名無しさん
2020/06/01(月) 18:13:08.51ID:8BAaT/q7 ×書けなかったな
○しか書けなかった
○しか書けなかった
162デフォルトの名無しさん
2020/06/02(火) 10:09:36.47ID:d/ekt+66 ヘッダでvector要素の型を先行宣言で済ますことができるのc++20からだっけ?
163デフォルトの名無しさん
2020/06/02(火) 11:21:52.93ID:7ZgjbGq0 Working Draft, Standard for Programming Language C++
Document Number: N4713, Date: 2017-11-27
というPDFを読んでいるんだけど、explicitキーワードの事について調べようとしても、
索引(index)には載ってないようだけど、どこに書いてる?
Document Number: N4713, Date: 2017-11-27
というPDFを読んでいるんだけど、explicitキーワードの事について調べようとしても、
索引(index)には載ってないようだけど、どこに書いてる?
164デフォルトの名無しさん
2020/06/02(火) 12:04:07.50ID:eZHppilZ >>163
N4713だよね? P.1373の2行目は見た?
N4713だよね? P.1373の2行目は見た?
165デフォルトの名無しさん
2020/06/02(火) 12:30:40.82ID:7ZgjbGq0 >>164
Indexのspecifier項目のサブ項目として書いてあったんですね。
でもこれだとexplicitが何なのかを知りたい人にとっては索引としての役割を果たさないです。
いわば国語辞典で知らない単語を調べるのに勝手にカテゴリー分けしてあるようなものです。
それでは辞典の意味をなしません。
Indexのspecifier項目のサブ項目として書いてあったんですね。
でもこれだとexplicitが何なのかを知りたい人にとっては索引としての役割を果たさないです。
いわば国語辞典で知らない単語を調べるのに勝手にカテゴリー分けしてあるようなものです。
それでは辞典の意味をなしません。
166はちみつ餃子 ◆8X2XSCHEME
2020/06/02(火) 12:34:14.97ID:N0F889O8167デフォルトの名無しさん
2020/06/02(火) 12:47:31.50ID:67GQ09ou 試しに検索かけたら1102件もヒットしたやんけ!餃子のバカバカ
168デフォルトの名無しさん
2020/06/02(火) 13:55:05.15ID:7ZgjbGq0 AdobeRederは使いにくいので、SumatraPDF Reader を使って、まず、
左側のペーンに出てくる目次で index をクリックし、右側のペーンに
巻末の索引を出した後、右側のペーンの中で CTRL+Fを押して、
explicitを検索すると良いよう。
左側のペーンに出てくる目次で index をクリックし、右側のペーンに
巻末の索引を出した後、右側のペーンの中で CTRL+Fを押して、
explicitを検索すると良いよう。
169デフォルトの名無しさん
2020/06/02(火) 14:01:01.31ID:Ja+74ng6 素直にありがとうも言えないのか
これだからC++erは
これだからC++erは
170デフォルトの名無しさん
2020/06/02(火) 14:11:59.21ID:7ZgjbGq0 >>169
ありがとう。
ありがとう。
171デフォルトの名無しさん
2020/06/02(火) 14:58:48.73ID:7ZgjbGq0 nested-name-specifier:
::
type-name ::
namespace-name ::
decltype-specifier ::
nested-name-specifier identifier ::
nested-name-specifier template opt simple-template-id ::
と有るのですが、このBNFだけで解釈するなら、ns1, ns2,ns3 という namespace が有った場合の
ns1::ns2::ns3::変数名
のような場合、
namespace-nameと認識されるのは ns1だけで、ns2,ns3は、identifierと
識別されるのでしょうか。
::
type-name ::
namespace-name ::
decltype-specifier ::
nested-name-specifier identifier ::
nested-name-specifier template opt simple-template-id ::
と有るのですが、このBNFだけで解釈するなら、ns1, ns2,ns3 という namespace が有った場合の
ns1::ns2::ns3::変数名
のような場合、
namespace-nameと認識されるのは ns1だけで、ns2,ns3は、identifierと
識別されるのでしょうか。
172デフォルトの名無しさん
2020/06/02(火) 15:00:52.54ID:7ZgjbGq0 ちなみに、
namespace-name:
identifier
namespace-alias
namespace-alias:
identifier
となっており、namespace-nameには、a::bb::cc のようなものは含まれないと思われます。
namespace-name:
identifier
namespace-alias
namespace-alias:
identifier
となっており、namespace-nameには、a::bb::cc のようなものは含まれないと思われます。
174デフォルトの名無しさん
2020/06/02(火) 16:38:50.35ID:7ZgjbGq0 >>171
の定義だと、
decltype(x)::decltype(y)::decltype(z)
のようなものは使えないということになるようです。
ひょっとすると、C++の仕様書的には、
ns1::ns2::ns3::変数名
も使えないのもかも知れませんがよく分かりません。
の定義だと、
decltype(x)::decltype(y)::decltype(z)
のようなものは使えないということになるようです。
ひょっとすると、C++の仕様書的には、
ns1::ns2::ns3::変数名
も使えないのもかも知れませんがよく分かりません。
175デフォルトの名無しさん
2020/06/02(火) 17:48:50.88ID:eZHppilZ176デフォルトの名無しさん
2020/06/02(火) 19:53:34.27ID:Ja+74ng6 よくわかんないけど
ツイッターで誹謗中傷してそう
ツイッターで誹謗中傷してそう
177デフォルトの名無しさん
2020/06/03(水) 10:50:24.30ID:TdRUmxlv https://en.cppreference.com/w/cpp/utility/hash
MyHash{}(obj)
std::hash<S>{}(obj)
の{}は、直接リスト初期化のもので、いったんMyHash型やstd::hash<S>型のテンポラリ・オブジェクトを作成してからoperator()関数をobjを実引数にして呼び出しているという理解でよろしいですか?
MyHash{}(obj)
std::hash<S>{}(obj)
の{}は、直接リスト初期化のもので、いったんMyHash型やstd::hash<S>型のテンポラリ・オブジェクトを作成してからoperator()関数をobjを実引数にして呼び出しているという理解でよろしいですか?
178デフォルトの名無しさん
2020/06/03(水) 11:38:29.12ID:Nfbl5e81 newしたあとにdeleteしなくてもアプリケーションを終了すればメモリは解放されますか?
179デフォルトの名無しさん
2020/06/03(水) 11:58:33.77ID:VI2pYiE8 OSによる
180デフォルトの名無しさん
2020/06/03(水) 12:21:28.49ID:TdRUmxlv181デフォルトの名無しさん
2020/06/03(水) 12:24:39.32ID:DAHZjgl3182デフォルトの名無しさん
2020/06/03(水) 12:28:15.38ID:Nfbl5e81183はちみつ餃子 ◆8X2XSCHEME
2020/06/03(水) 13:34:40.56ID:3vvIkHpN >>178
プロセスに割り当てられているメモリは現代の普通のデスクトップOS上でならプロセスの終了と共に解放されるのだけど、
オブジェクトは外部のリソースのハンドルを掴んでいることがあるから
それを正常に (デストラクタで) 後始末しないとリソースリークが起こる可能性はある。
POD 型のオブジェクトに限ってならば管理されてるリソースはメモリだけだから
delete しなくてもプロセス終了時におおよそ安全に解放されることは期待していいと思う。
言語仕様での保証はないので C++ スレ的に言えば「やめとけ」ってことになるけど。
プロセスに割り当てられているメモリは現代の普通のデスクトップOS上でならプロセスの終了と共に解放されるのだけど、
オブジェクトは外部のリソースのハンドルを掴んでいることがあるから
それを正常に (デストラクタで) 後始末しないとリソースリークが起こる可能性はある。
POD 型のオブジェクトに限ってならば管理されてるリソースはメモリだけだから
delete しなくてもプロセス終了時におおよそ安全に解放されることは期待していいと思う。
言語仕様での保証はないので C++ スレ的に言えば「やめとけ」ってことになるけど。
184デフォルトの名無しさん
2020/06/03(水) 13:47:15.12ID:gQ0mUfsI メモリと断っている人に余計なこといわなくていいと思うけど
アプリの異常終了であっても解放されてほしいのだろうから
c++の終了処理に依存してもしゃない
アプリの異常終了であっても解放されてほしいのだろうから
c++の終了処理に依存してもしゃない
185デフォルトの名無しさん
2020/06/03(水) 14:24:00.16ID:UHE1JPNz >>181
何がたまたまの結果だよ
C++規格票とドラフトは巻末に索引があって
検索でヒットしすぎるときは末尾を見に行けば
そこは索引の中である可能性が大きいというのを
思いつくことができんのかおまえさんの頭では
だから見つけられなくて聞いてきたというなら合点だ
何がたまたまの結果だよ
C++規格票とドラフトは巻末に索引があって
検索でヒットしすぎるときは末尾を見に行けば
そこは索引の中である可能性が大きいというのを
思いつくことができんのかおまえさんの頭では
だから見つけられなくて聞いてきたというなら合点だ
186デフォルトの名無しさん
2020/06/03(水) 14:27:27.09ID:UHE1JPNz >>178
世の中すべての::operator newの内容を確認してからでないと答えられない質問だ
もっと言うなら将来にわたってタイムマシンで確認してくる必要があるから
調査の工数が発散しちまう
どういう意味かわかるな?
世の中すべての::operator newの内容を確認してからでないと答えられない質問だ
もっと言うなら将来にわたってタイムマシンで確認してくる必要があるから
調査の工数が発散しちまう
どういう意味かわかるな?
187デフォルトの名無しさん
2020/06/03(水) 15:04:54.04ID:TdRUmxlv https://qiita.com/SaitoAtsushi/items/8da8ae7f6b84b1d806e4
int main(){
double a = 1.5;
std::string b = "Hello World";
struct foo{};
xyz(a, b, foo());
}
↑のfoo()は一時オブジェクトの作成ですね?
int main(){
double a = 1.5;
std::string b = "Hello World";
struct foo{};
xyz(a, b, foo());
}
↑のfoo()は一時オブジェクトの作成ですね?
188デフォルトの名無しさん
2020/06/03(水) 15:11:30.37ID:DAHZjgl3 >>185
他人の茶々入れに何言ってんだよw
他人の茶々入れに何言ってんだよw
189デフォルトの名無しさん
2020/06/03(水) 15:12:28.27ID:DAHZjgl3 >>186
やはりこんな奴かwww
やはりこんな奴かwww
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪★2
- じゃあ何券だったら、日本人は満足したんだよ [452836546]
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 悪気はないのに、不意に相手を傷付けてしまう事ってあるんだな
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
- 僕が未だに紙の単行本を集めてる漫画が「ご注文はうさぎですか?」「ゆるゆり」「大室家」「邪神ちゃんドロップキック」なんだが
