X



【初心者歓迎】C/C++室 Ver.102【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/11/04(土) 16:33:35.07ID:NYxCuvMY
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1500329247/
0534デフォルトの名無しさん
垢版 |
2018/04/12(木) 12:25:36.92ID:KhnSMF/h
>>532

ありがとうございました。

>>533

Visual Studioではコンパイルエラーになりません。
0537 ◆QZaw55cn4c
垢版 |
2018/04/12(木) 15:19:35.63ID:4odEe1Tq
とりなくこえすゆめさませ
0538デフォルトの名無しさん
垢版 |
2018/04/12(木) 21:59:02.17ID:nMaemNOx
const double const a[];

const double a[];
と同じ意味
const const double const const a[];
なんて書いてもいいし
double const a[];
と書いてもいい

const typename と typename const と同じ
しかもconstはいくつ書いてもいい
0539デフォルトの名無しさん
垢版 |
2018/04/13(金) 10:38:13.53ID:roGFrSR8
Win32のBOOL型を返す関数を複数回呼んで、
すべて成功したときのみTRUEを返したいのですが
(途中で失敗しても関数自体はすべて呼んでおく)、

BOOL Test()
{
  BOOL bResult = TRUE;
  bResult &= Api(...);
  bResult &= Api(...);
  bResult &= Api(...);
  return bResult;
}

と書いてとりあえず動くのですが、よく考えたら&=はビット演算だし、
Win32のBOOL関数は成功時にTRUEを返すとは書いていないので、
例えば関数が成功時に2を返すパターンがあったら、
すべて成功しても戻り値はFALSEになるのではと思っています。

この場合、

bResult = Api(...) && bResult;
bResult = Api(...) && bResult;
bResult = Api(...) && bResult;

みたいな書き方をするしかないのでしょうか。
0540デフォルトの名無しさん
垢版 |
2018/04/13(金) 10:57:04.94ID:UdLtdLwz
result &= !!api(...);

という風に!!を使うのも zero, non zero を false/true に正規化するイディオムだけど、
何にしても見た目は汚いと思う

文字数は増えるがif文を使って
if (!api()) result=false;
の方が可読性高いかもしれない
0541デフォルトの名無しさん
垢版 |
2018/04/13(金) 11:38:56.36ID:OgXHMhZG
>>539
成功した回数をカウントして呼び出す関数が3つなら3でTRUEにするかな
BOOL Test()
{
int count = 0;
if(Api() != FALSE) count++;
if(Api() != FALSE) count++;
if(Api() != FALSE) count++;
if(count == 3) return TRUE;
}
0542デフォルトの名無しさん
垢版 |
2018/04/13(金) 12:44:10.91ID:mVcRE5FO
結果を std::vector にでもまとめておいて、 std::all_of で全てがFALSEでないことを確認するとか。
0543デフォルトの名無しさん
垢版 |
2018/04/13(金) 12:50:27.67ID:UkpF6ptq
>>539
> bResult = Api(...) && bResult;
> bResult = Api(...) && bResult;
> bResult = Api(...) && bResult;
これでいいと思う

>>541
3個位ならいいけどたくさんになると数え間違いとかやらかしそう
0547539
垢版 |
2018/04/13(金) 15:24:49.14ID:roGFrSR8
みなさんご意見ありがとうございます。
例を簡略化しすぎてしまいましたが、処理は状況によって分かれるため、
常に同じ関数が3回というわけではありませんでした。
失礼しました。

bResult = Api(...) && bResult;

の書き方自体は、そこまで汚いわけではないのですね。
同じような書き方をしているソースも、検索してみたら出てきました。

個人的には、

bResult &&= Api(...);

のような記述ができるとありがたかったです。
0549デフォルトの名無しさん
垢版 |
2018/04/13(金) 16:33:04.14ID:cn4ajNkQ
&&= と書けないことをこの質問で知ったわ。

>>548
「返り値が0でなければ成功」の関数で変テコな返り値が来ると
組み合わせでダメになるかも。
256 * 256 == 65536 で オーヴァーフローして0、みたいな感じ。
0550デフォルトの名無しさん
垢版 |
2018/04/13(金) 16:33:39.54ID:aZorcSvM
明確なメリットが無いのに、
無駄にトリッキーなコードを書くのはおすすめしない
0551デフォルトの名無しさん
垢版 |
2018/04/13(金) 16:39:34.39ID:aZorcSvM
数が少なく重要な箇所であれば、
デバッグ用コードを追加しやすい以下で良い

if (!Api(...)){
bResult = FALSE;
}
...

数が少なく重要じゃなければ >>547 で良い

数が多ければ色々と工夫しようか
0552 ◆QZaw55cn4c
垢版 |
2018/04/13(金) 16:44:07.64ID:fORiWt/O
>>548
適当なニ数をかけたら 0 になってしまった、とかはあり得るのでしょうか?

…んー、ないな、何故ないのだろう?
0553デフォルトの名無しさん
垢版 |
2018/04/13(金) 17:53:26.34ID:ledbPVdv
基底クラスのメンバ関数に virtual をつけないことってあるんですか?
つけてもつけなくてもどちらでもいいという場合はあると思いますが、
つけちゃいけないという場合が考えにくいのですが、そういう場合は
あるのでしょうか?
0554デフォルトの名無しさん
垢版 |
2018/04/13(金) 17:55:06.07ID:ledbPVdv
逆に言うと、今のC++でvirtualをつけた場合の機能をvirtualをつけなかった場合の
デフォルトの機能にすればいいのにと思います。

どうでしょうか?
0555片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2018/04/13(金) 17:56:07.81ID:meZ//aXI
>>553
仮想メソッドは、最適化がなければ関数ポインタのように確保されるので、不必要なものはメモリーの無駄になる。
0556デフォルトの名無しさん
垢版 |
2018/04/13(金) 17:58:31.25ID:ledbPVdv
>>555

virtualはつけなくてもかまわない場合には付けない方がいいということなんですね。

ありがとうございました。
0558はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/04/13(金) 21:02:41.55ID:RMqAMM1S
>>557
せやな。 普通はないと思うが、無いと言い切ることもできない。

ここまでいろんな案が出てるけど、なんだかんだで >>539 が自分で結論出してるのがベストだと思う。
書き方の話なら、マクロでもクラスでも適当なものでラップすれば見栄えはどうとでも出来ることだし。
0560デフォルトの名無しさん
垢版 |
2018/04/14(土) 00:48:59.29ID:qJeIaUAA
今回は「非ゼロ」が様々な数値である場合について考えているわけだから
0x80000 等掛けたらゼロになるケースを意識しないのはむしろ不自然
0561デフォルトの名無しさん
垢版 |
2018/04/14(土) 01:08:45.20
int64_t 使えばいいだろwww
ケチケチすんなってwwwww
0563デフォルトの名無しさん
垢版 |
2018/04/14(土) 05:40:34.13ID:DUdlBUp3
>>547
汚い書き方とまでは言わないけど、個人的にはあまりいいやり方だとも思わないかな。

俺もC, C++を覚えた当初はなるべく冗長な記述を省くことが正義であると考えていたけど、
そのうち高々数文字削ることなんかより、素直に可読性や保守性が高い記述をする方が美しいと感じるようになったよ。
0566デフォルトの名無しさん
垢版 |
2018/04/14(土) 10:42:40.78ID:pziCCgl7
>>556
補足すると、仮想関数は呼び出しのコストも同じ理由で非仮想のメンバ関数より高い(わずかだけど
あと、仮想関数が一つでもあるクラスは、そのクラスのオブジェクトの先頭に仮想関数テーブルへのポインタが入る
つまり純粋にメンバ変数のデータ通りのメモリイメージになるクラスが作れなくなる

virtualかどうかを選ぶ余地があるってことは選ぶ必要があるということだよ
0571デフォルトの名無しさん
垢版 |
2018/04/14(土) 17:00:09.46ID:6q9VmxFv
a=1に対して、
cout << a << a++なら21
cout << a++ << aなら12
cout << a++ << a++なら21
と表示されました。
coutはどんな順番で評価されているのでしょうか?
0572デフォルトの名無しさん
垢版 |
2018/04/14(土) 18:21:04.74
>>571
確かに以下は
https://ideone.com/sBACG3
21
12
21
と表示される

でも、手元のVC 2017 / Windows 10 では
11
12
11
と表示された

g++ x86_64-posix-seh 7.1.0 / Ubuntu 16.04.3 LTS on Windows 10 では
11
12
12
と表示された
0573デフォルトの名無しさん
垢版 |
2018/04/14(土) 18:31:12.32
>>572
http://codepad.org/KVv4KD8O
ではコンパイルエラーになった。
cc1plus: warnings being treated as errors
In function 'void test1()':
Line 6: warning: operation on 'a' may be undefined
In function 'void test2()':
Line 12: warning: operation on 'a' may be undefined
In function 'void test3()':
Line 18: warning: operation on 'a' may be undefined

http://techtipshoge.blogspot.jp/2012/01/c.html
http://www.kouno.jp/home/c_faq/c3.html
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

こんな書き方をするなってことだね
0574デフォルトの名無しさん
垢版 |
2018/04/15(日) 00:38:00.30ID:/OvgYAab
>>571
いくつかの例外を除いて式中の各項が評価される順序は決まっていないので、
評価される順を知りたいのなら実際にコンパイルされた結果のコードや挙動を見て調べるしかない。
0575デフォルトの名無しさん
垢版 |
2018/04/15(日) 08:36:03.86ID:IUBKEb9a
未定義動作になるから、今回のコンパイル時と次回のコンパイル時とで
同じ順序で評価されない可能性もある、じゃないかな。

実際のところ、コンパイルごとに評価順が変化するとも思えないけど。
いずれにせよ「未定義動作は避けろ」が間違いない方針だわね。
0577デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:08:58.88ID:c4dXLki+
class Base {
public:
void A();
protected
virtual void B();
}

void Base::A() {
B();
}

void Base::B() {
cout << "Base" << endl;
}

class Derived : public Base {
protected
virtual void B();
}

void Derived::B() {
cout << "Derived" << endl;
}

Base b;
b.A(); ⇒ 「Base」が表示される。

Derived d;
d.A(); ⇒ 「Derived」が表示される。

b = d;
b.A() ⇒ 「Base」が表示される。
0578デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:11:08.98ID:c4dXLki+
b = d;
b.A() ⇒ 「Base」が表示される。

↑で、なぜ、「Derived」が表示されないのでしょうか?

ロベールの本に、
「仮想関数はどんな状況でもそのオブジェクトの本来の型のものが呼ばれる」
と書いてあります。
0579デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:29:12.58ID:VXOW+WoG
void Base::A() {
B();
}

void Base::B() {
cout << "Base" << endl;
}

A() の中で、B() を呼んでいるから

A(), B() は異なる関数なのに、呼ぶなんてあり得ないだろ。
こんなコーディングはしない
0581デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:41:29.91ID:c4dXLki+
>>578-579

よく分かりません。

ポリモーフィズムというのがありますが、その考え方だと

b = d;
b.A() ⇒ 「Derived」が表示される。

のではないかと思ってしまいます。
0582デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:59:34.87ID:c4dXLki+
Base::B() の virtual を削除する:

class Base {
public:
void A();
protected
void B();
};


すると、

Base b;
b.A(); ⇒ 「Base」が表示される。

Derived d;
d.A(); ⇒ 「Base」が表示される。
0583デフォルトの名無しさん
垢版 |
2018/04/15(日) 11:27:00.75ID:ZEcSoj1Y
ポインタじゃなくて実体をBase bに代入(コピー)したらDerivedじゃなくなるのは当然。「スライシング」でググれ。
0586デフォルトの名無しさん
垢版 |
2018/04/15(日) 12:16:46.54ID:VXOW+WoG
まずこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014

最難関のC++ で、オブジェクト指向を学ぶなんて、夢のまた夢w
軽く、数年を無駄にするだけ

C++ なんて、偏差値70以上しか無理やのに
0587デフォルトの名無しさん
垢版 |
2018/04/15(日) 12:34:26.84
>>577
> b = d;
> b.A() ⇒ 「Base」が表示される。

Base bp;
bp = &d;
b->A();

こうやね
0588デフォルトの名無しさん
垢版 |
2018/04/15(日) 12:35:11.72
>>582
間違えた

Base *bp;
bp = &d;
b->A();
0589デフォルトの名無しさん
垢版 |
2018/04/15(日) 12:36:47.16ID:c4dXLki+
>>583-585

ありがとうございました。


C++が難しいというのは、設計が悪いからですか?
C++と同等の機能を持った言語で、C++よりも分かりやすい言語を新たに
設計することは無理ですか?
0590デフォルトの名無しさん
垢版 |
2018/04/15(日) 12:37:23.54ID:c4dXLki+
>>587-588

ありがとうございました。
試してみようと思います。
0591デフォルトの名無しさん
垢版 |
2018/04/15(日) 12:43:40.81ID:c4dXLki+
理由があってC++を習得するのが難しいのならOKですが、設計が悪いから
難しいということになると、利用者にとっては迷惑な話ですね。
0592デフォルトの名無しさん
垢版 |
2018/04/15(日) 13:30:31.42ID:VXOW+WoG
C++ は、何でも出来るようにしているから、ルール数が100以上ある

さらに、ルールAでは、B, C は除くとか、
1つのルールが、他のルールとからむから、
非常に難しいし、組み合わせ爆発が起こる

膨大な時間を無駄にしても、さほど理解できず、身につかない。
組み込み機器も想定しているから、
どうしてこういうルールが必要なのか、初心者には理解できない。
Rust ですら、初心者には無理だろ

だから、ドワンゴ江添の本を持って、数年山ごもりしろって言われる。
ルールの多さで、廃人になってしまう

初心者には、絶対に無理。
最初から、エベレストを登るようなもの。
まず「スッキリわかる Java入門」とかの、低い山で修行を積むべし

このレベルでは言語どうこうじゃない。
小中高大学まで行くような、研修制度・道筋が大事。
徐々に基礎体力を付けていかないと、何もできない
0593592
垢版 |
2018/04/15(日) 13:45:38.29ID:VXOW+WoG
ロベールでC++ を勉強するのも良いけど、
あくまで、C++ の初心者というだけで、
C++ をやるには、最低でも数言語は知っている必要がある

特に、Java, C, Rust は、絶対に知っていないといけない。
組み込みの知識も必要

C++ の初心者だけど、他の言語はプロ級で、
PC・組み込み・Linux コマンドも知っていて、C++ を始められる

それでも、ほとんどのC プログラマーは、C++ へ進めない
0595デフォルトの名無しさん
垢版 |
2018/04/15(日) 15:24:18.71ID:qZPDSYA2
某洋氏翻訳の第4版がロベール本より先に出てくる理由について3行で述べよ。

第3版が難読版というのは判る
0596デフォルトの名無しさん
垢版 |
2018/04/15(日) 15:55:19.09ID:/OvgYAab
= が代入じゃなく単に Base クラスのオブジェクトのoperator = を呼んでるだけ、
という理解が必要なんだろうけれどこれ難しいだろうか?

cから来た人なら
struct base b;
b = ...;
で b の型が変わるなんて考えもしないだろうけど
最近の人は c やらないのかな
0599デフォルトの名無しさん
垢版 |
2018/04/15(日) 18:07:17.49ID:c4dXLki+
>>588

試してみました。
確かにポインタを使うと期待通りの結果でしたが、参照を使うと期待通りにはいきませんでした。
これはなぜでしょうか?

#include "Derived.h"

int main() {
Base b;
Base& br = b;
br.A();

Derived d;
br = d;
br.A();

Base *bp;
bp = &b;
bp->A();

bp = &d;
bp->A();
}

実行結果は以下です。

Base
Base
Base
Derived
0600デフォルトの名無しさん
垢版 |
2018/04/15(日) 18:44:29.81ID:ZEcSoj1Y
参照は書き換えられないからな。

>br = d;

参照先のbに代入してるのと同じこと。
0601デフォルトの名無しさん
垢版 |
2018/04/15(日) 18:50:44.48ID:CIuag2/D
>>599
当たり前
br は b の別名なだけだから
b = d;
ってやってるのと同じ
b は Base の領域しかないんだから b.A() で Delived::A() を呼び出した時に Delived にしかないメンバ変数とか参照してたら困るし
0602デフォルトの名無しさん
垢版 |
2018/04/16(月) 00:20:31.20ID:TXxoP4/a
参照のポインタっぽい振る舞いを確認したいならこう

Derived d;
Base & b1(d);
b1.A();
0603デフォルトの名無しさん
垢版 |
2018/04/16(月) 07:57:32.89ID:PsSdBUuj
>>602
ありがとうございました。
下の結果は、

Base
Derived
Derived

になりました。1番目と2番目の違いがよく分かりません。この違いが分かれば、疑問が
解消することになると思うので、理解したいです。

#include "Derived.h"

int main() {
Derived d;
Base b;

Base& br1 = b;
br1 = d;
br1.A();

Base& br2(d);
br2.A();

Base *bp;
bp = &d;
bp->A();
}
0604デフォルトの名無しさん
垢版 |
2018/04/16(月) 08:01:12.80ID:PsSdBUuj
Base
Derived
Derived

となりました。

2番目と3番目は同じことの別表現のようですね。
見た感じ、1番目と2番目に違いがあるようには思えません。

Derived d;
Base b;

Base& br1 = b;
br1 = d;
br1.A();

Base& br2 = d;
br2.A();

Base& br3(d);
br3.A();
0605デフォルトの名無しさん
垢版 |
2018/04/16(月) 08:14:10.02ID:TXxoP4/a
>>604
参照は初期化時に参照先が設定され、以降の操作は参照先に対してなされる。
初期化と代入を区別すること。

Base& br1 = b; // 初期化 br1 は b の参照
br1 = d; // 代入 b = d と同じ動作

Base& br2 = d; // 初期化 br2 は d の参照
0606デフォルトの名無しさん
垢版 |
2018/04/16(月) 08:32:20.53ID:PsSdBUuj
>>605

ありがとうございました。

>Base& br1 = b; // 初期化 br1 は b の参照
>br1 = d; // 代入 b = d と同じ動作

br1 = d としても参照先は変わらないんですね。

ありがとうございました。
0607デフォルトの名無しさん
垢版 |
2018/04/16(月) 12:10:28.34ID:rDfY3L1y
Java,C#などのプログラマです。
C++にC#などのインターフェースはない代わりに多重継承?できるのでそれを使うとのことで、
https://ideone.com/k7g2nn
ITestAとITestBはインターフェース的なものです。
で、ITestAを実装したCBaseAを作り、CBaseAを継承しITestBを実装したCTestBを
作ったのですが、
CBaseBをnewなど実体化するとITestA::methodAがオーバーライドされておらずCBaseBは
抽象クラスになってて実体化できません。
ITestA::methodAをCBaseBでまた実装しなければいけないんでしょうか??
というかこういう場合C++ではどうすればいいのでしょうか?
0608デフォルトの名無しさん
垢版 |
2018/04/16(月) 12:43:19.10ID:qlfABgAK
Base Pointer : 100〜119
Derived Pointer : 120〜139

こういう状況で、Base クラスを指す際、クラスポインターは100 を指している。
100〜119 内で、Base クラスの変数・メソッドのアドレスを探す

Derived クラスを指す際、クラスポインターは自動的に、120 に変わる。
120〜139 内で、Derived クラスの変数・メソッドのアドレスを探す
0613デフォルトの名無しさん
垢版 |
2018/04/16(月) 14:32:34.81ID:rDfY3L1y
もちろん、エラーなくしてコンパイルを通す方法は
>>607
>ITestA::methodAをCBaseBでまた実装しなければいけないんでしょうか??
で書いたようにすればとりあえず、コンパイルは通ります。
聞きたいのは、
C#の場合はBaseAの方で一度MethodAを宣言・定義すればいいのですが、
C++の場合は毎回CBaseAの派生クラスでmethodAを宣言して定義しなおさなければいけないのでしょうか??
それともC++では他の方法があるのでしょうか?
0615デフォルトの名無しさん
垢版 |
2018/04/16(月) 15:08:36.13ID:rDfY3L1y
>>612
そっか。純粋仮想関数じゃなくて仮想関数にするって手もありましたか。
まぁ、インターフェース的なクラスの方をいじくるのが気になりますが。
ありがとうございます。
0619デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:08:59.76ID:SGgdop5e
巨大なファァイルの読み込みに関してです。
たとえば1000行のテキストからなるファイルの1000行目だけを読み込んで、配列に
代入したいのですが、ファイルをopenしていきなり1000行目にアクセスする方法はありますでしょうか?
現在、forループで1000回廻して1行ずつ増やしてアクセスし1000回目にfgetsで読み込んで配列に入れているのですが、999回のループが無駄なので高速化したいのですが、どなたかご教授いただけないでしょうか?
0620デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:20:32.18ID:/qMRupTB
行という概念が
先頭から読んでいって逐次確認しないと行の区切りが確定しないのでどうしようもないんじゃない?

ファイルサイズ分一気にオンメモリで読んで後から行の切り出しするとかの工夫はあるだろうけど
0621デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:29:32.71ID:KTfx2aCu
>>619
テキストのフォーマットによっては高速化は可能
例えば1行が固定サイズとか行番号が書いてあるとか

全く自由なフォーマットだと頭から解析するしかない

読み込みスレッドと解析スレッドを分けると速くなることもあるかも

同じファイルが複数回指定されることが多ければ
ファイル名と更新日時と1000行目の位置
のデータベースを持つとか
0622デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:30:11.39ID:cVYjBdTw
>>619
「1000行目」の定義が先頭から数えて999番目の改行の次、である以上ありません。
1行のバイト数を全て同一にすることができれば(この場合しばしば行ではなくレコードと呼ばれる)
1000番目のバイト位置を計算してそこから読むことができます。

FILE * を用いてシーケンシャルにたくさん読む場合は
setvbuf でバッファサイズを拡大しておくと高速になることも多いので試す価値はあるでしょう

いろんな行に何度もアクセスするなら、
全てメモリに読み込んだ上で各行の先頭位置を配列に記録しておくと良いでしょう。
0623デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:36:06.95ID:p5xwhAV/
末尾にseekして、適当に戻って読んでみて、
改行がなければまた戻って、を繰り返すのが現実的。
0624デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:40:13.25ID:/qMRupTB
巨大なファイルの中途の行じゃなく、ファイルの最終行だけを抜き出したい のか?
0625デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:50:32.61ID:yyY2OAEq
対象のテキストファイルとは独立に、
「そのテキストファイルの各行がファイルの何バイト目から始まるか」
という情報を覚えておく手はあると思うけど、整合を保つのが面倒よね。

>>622 の後半部分だな。
0626619
垢版 |
2018/04/17(火) 18:03:45.64ID:SGgdop5e
皆様いろいろご指導ありがとうございました。
私の能力では難しそうですが、いろいろ高速化を試してみます。
0627デフォルトの名無しさん
垢版 |
2018/04/17(火) 18:46:11.69ID:NCQX7EWc
末尾にseek して1文字抜出し(末尾が\n の場合はそれを無視して)
\n が現れるまで1文字ずつ戻りながらキューに積んで
最後にキューの中身を逆順にする
0628デフォルトの名無しさん
垢版 |
2018/04/17(火) 18:55:56.84ID:gaNnpc4H
配列の要素数が分からないときscanfで読み込んだ値を要素数にするにはどのようにしたらよいですか?
0630デフォルトの名無しさん
垢版 |
2018/04/17(火) 20:21:29.36ID:AHw7lgSX
基本的な事なんだろうけど、vectorを範囲ベースのforループしたいのですができません。
auto v = vector<int>()だとfor (auto &i : v)でいけるのですが、
newした場合はどうすればいいのでしょうか?
autov = new vector<int>(); for (auto &i : v)だと
begin関数が見つかりませんといってコンパイルできません。
どうすればいいでしょうか?
0631デフォルトの名無しさん
垢版 |
2018/04/17(火) 20:24:11.47ID:AHw7lgSX
すみませんでした。普通に逆参照すればいいのか。
auto v = new vector<int>(); for (auto &i : *v)
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況