Új hozzászólás Aktív témák

  • joysefke

    veterán

    válasz dabadab #11258 üzenetére

    Ok, az alábbi kód tesztelve és, működik.

    Két hiba volt:

    (1)
    első (ocsmány) hiba:
    az első sort beolvasó cin >> aN >> reads;
    összeakad a második (és utána következő aN) sort beolvasó:
    getline(cin, line);
    istringstream s(line);

    kóddal. A getline(cin, string line) valamiért az első, a cin >> aN >> reads
    által olvasott sort is olvassa, pedig csak a másodiktól kellene olvasnia. Elimináltam ez egész kódból a cin-t, és mindent soronként olvasok és parsolok, így működik.

    (2)
    A vector<vector<int>> struktúrát (nyilván) rosszul inicializáltam. Most deklaráltam két változót:

    vector<vector<int>> a;
    vector<int> b;

    A b-t inicializálom, feltöltöm és bele a.push_back(b) az a-ba.

    Tudom, hogy ez favágó programozás, mert biztos vagyok benne, hogy az a.push_back(b) az egy felesleges (kikerülhető) másolás, illetve a

    while (s >> temp) {
    b.push_back(temp);
    }

    kódrészlet sem optimális, mivel nem használom ki, hogy ismerem a b-vektor hosszát, ezért felesleges resize műveleteket fog csinálni a kód runtime-ban...
    szerk: beleraktam egy b.reserve(temp)-et, ez feltételezem kiküszöböli a runtime resize-olást...

    int main() {

    int aN = -1;
    int reads = -1;

    string line;
    int temp;
    int r, c;

    getline(cin, line);
    istringstream s(line);
    s >> aN;
    s >> reads;

    vector<vector<int>> a;
    vector<int> b;

    for (int i = 0; i != aN; ++i) {
    getline(cin, line);
    istringstream s(line);
    s >> temp;
    b.clear();

    while (s >> temp) {
    b.push_back(temp);
    }
    a.push_back(b);
    }

    for (int i = 0; i != reads; ++i) {
    cin >> r >> c;
    cout << a[r][c] << endl;
    }

    return 0;
    }

Új hozzászólás Aktív témák

Hirdetés