std :: vectorの最初の要素の値が間違っています

ビクターフェレイラ

私はc ++を学んでいます私は恐ろしく新しいです、私は私のコードにバグを見つけて例で再現することができました、このコードで私はいくつかの価格オブジェクトを生成してそれをstd :: vectorに追加しています、なぜオブジェクト内closeの値最初の要素の価格は明らかにメモリ内のランダムな値ですか?これは参照の問題ですか?

#include <vector>
#include <string>
#include <iostream>

class Price{
public:
    double entry;
    double close;  
    Price(double initial){
        entry = initial;
    }
};

int main(){
    std::vector<Price> prices;
    bool open = false;
    int index = 1;
    std::cout << "#######  before  ########" << std::endl;
    while (index < 10){
        if (open){
            Price current = prices[prices.size() - 1];
            current.close = -current.entry;
            open = false;
            std::cout << "open: " << current.entry << " | close: " << current.close<<std::endl;
        }
        else{
            Price new_price(index);
            prices.push_back(new_price);
            open = true; 
        }
        ++index;
    }
    std::cout << std::endl << "#######  after  ########" << std::endl;
    for(const auto price: prices){
        std::cout << "open: " << price.entry << " | close: " << price.close << std::endl;
    }
}

上記のコードによって生成される出力は次のとおりです。

#######  before  ########
open: 1 | close: -1
open: 3 | close: -3
open: 5 | close: -5
open: 7 | close: -7

#######  after  ########
open: 1 | close: 4.6799e-310
open: 3 | close: -1
open: 5 | close: -3
open: 7 | close: -5
open: 9 | close: -7

また、最後の要素のcloseの値に変更Price current = prices[prices.size() - 1];すると、破損し、最初の要素は問題ありません私は迷子になっています、誰かが私にこの行動を説明できますか?Price& current = prices[prices.size() - 1];

MikeCAT

では####### before ########リスト、あなたはメンバーの両方を持つオブジェクトを印刷するentryclose初期化されます。

一方、entry初期化されているだけのオブジェクトはベクターにプッシュpricesされ、####### after ########リストに出力されます。Price current = prices[prices.size() - 1];ベクター内のオブジェクトのコピーを作成するためcurrent、ベクター内の要素に影響を与えないように変更します。初期化されていないdoubleメンバーの値は不確定であるため、結果は偶然に取得されます。

Price& current = prices[prices.size() - 1];currentベクトルの要素影響与えるように変更を加えますが、ループは9回しか実行されないindex = 1, 2, ... , 9ため)、の初期化closeは行われません。あなたは、変更することもできますwhile (index < 10)while (index <= 10)、この問題を解消します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

const関数を介してstd :: vector要素のアドレスを返すのが間違っているのはなぜですか?

分類Dev

std :: mapの反復が最初の実行で間違ってしまう

分類Dev

Valgrindを使用したlongdoubleのstd :: fpclassifyの結果が間違っています

分類Dev

Visual C ++とgccの間でstd :: isblankからの一貫性のない戻り値。どちらが間違っていますか?

分類Dev

要素がstd :: vectorの最初の要素か最後の要素かを確認します

分類Dev

`std :: sin`は最後のビットで間違っています

分類Dev

整数配列で、stoulを使用したstd :: stringの出力が間違っています

分類Dev

`std :: string str(nullptr)`と `std :: string str = nullptr`が間違っているのはなぜですか?誰かが理由を詳細に説明できますか?

分類Dev

std :: accumulate関数がvector <double>の間違った合計を表示するのはなぜですか?

分類Dev

std :: includeのバグですか、それとも何か間違ったことをしていますか?

分類Dev

std :: vector <>の最初のN個の要素を保持し、残りを削除します

分類Dev

VisualStudioのstd :: nan / std :: nanfの何が問題になっていますか?

分類Dev

std :: arrayとstd :: vectorの違いは何ですか?いつ使用しますか?

分類Dev

std :: stringのstd :: vectorを初期化しています

分類Dev

.first値に基づいてstd :: pairのstd :: vectorから要素を削除する方法は?

分類Dev

std :: copyの間違った使用?

分類Dev

std :: copyの間違った使用?

分類Dev

C ++ std :: vectorはすべての要素をクリアします

分類Dev

std :: vectorの要素のdecltype

分類Dev

std :: vectorの最初から削除

分類Dev

Windowsでstd :: stringへのファイルの読み取りの長さが間違っているのはなぜですか?

分類Dev

std :: vector :: resizeとゼロへの直接初期化の間に違いはありますか

分類Dev

std :: unordered_mapのstd :: list要素を初期化しています

分類Dev

`std :: set`の要素に基づいて` std :: vector`をスライスする方法

分類Dev

std::vector と std::queue を使用した Prim のアルゴリズム、私のコードの何が問題になっていますか?

分類Dev

std :: is_trivially_copyableは間違っていますか?

分類Dev

SwiftUI:最初のリスト要素の位置が間違っています

分類Dev

std :: vector <std :: string>の要素を削除します

分類Dev

ListViewの最初のアイテムの値が間違っています

Related 関連記事

  1. 1

    const関数を介してstd :: vector要素のアドレスを返すのが間違っているのはなぜですか?

  2. 2

    std :: mapの反復が最初の実行で間違ってしまう

  3. 3

    Valgrindを使用したlongdoubleのstd :: fpclassifyの結果が間違っています

  4. 4

    Visual C ++とgccの間でstd :: isblankからの一貫性のない戻り値。どちらが間違っていますか?

  5. 5

    要素がstd :: vectorの最初の要素か最後の要素かを確認します

  6. 6

    `std :: sin`は最後のビットで間違っています

  7. 7

    整数配列で、stoulを使用したstd :: stringの出力が間違っています

  8. 8

    `std :: string str(nullptr)`と `std :: string str = nullptr`が間違っているのはなぜですか?誰かが理由を詳細に説明できますか?

  9. 9

    std :: accumulate関数がvector <double>の間違った合計を表示するのはなぜですか?

  10. 10

    std :: includeのバグですか、それとも何か間違ったことをしていますか?

  11. 11

    std :: vector <>の最初のN個の要素を保持し、残りを削除します

  12. 12

    VisualStudioのstd :: nan / std :: nanfの何が問題になっていますか?

  13. 13

    std :: arrayとstd :: vectorの違いは何ですか?いつ使用しますか?

  14. 14

    std :: stringのstd :: vectorを初期化しています

  15. 15

    .first値に基づいてstd :: pairのstd :: vectorから要素を削除する方法は?

  16. 16

    std :: copyの間違った使用?

  17. 17

    std :: copyの間違った使用?

  18. 18

    C ++ std :: vectorはすべての要素をクリアします

  19. 19

    std :: vectorの要素のdecltype

  20. 20

    std :: vectorの最初から削除

  21. 21

    Windowsでstd :: stringへのファイルの読み取りの長さが間違っているのはなぜですか?

  22. 22

    std :: vector :: resizeとゼロへの直接初期化の間に違いはありますか

  23. 23

    std :: unordered_mapのstd :: list要素を初期化しています

  24. 24

    `std :: set`の要素に基づいて` std :: vector`をスライスする方法

  25. 25

    std::vector と std::queue を使用した Prim のアルゴリズム、私のコードの何が問題になっていますか?

  26. 26

    std :: is_trivially_copyableは間違っていますか?

  27. 27

    SwiftUI:最初のリスト要素の位置が間違っています

  28. 28

    std :: vector <std :: string>の要素を削除します

  29. 29

    ListViewの最初のアイテムの値が間違っています

ホットタグ

アーカイブ