Problem z vectorem

Problem z vectorem
TM
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:2
0

Witam
Postanowiłem ostatnio pobawić się z zadaniami z c++ w sieci i natknąłem się na mały problem, kiedy staram się wrzucać do vectora (v.push_back()) wartości z przedziału 1-4 to czasami zostanie tam wepchnięta wartość ujemna, czasami bardzo duża ujemna (-132212992), ktoś może wyjaśnić dlaczego może się tak dziać? W załącznikach zawarty jest kod aplikacji oraz wyniki testów.

lion137
Daj kod w na forum, a nie w zalacznikach
TM
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:2
0

vector<int> solution(string &S, vector<int> &P, vector<int> &Q) {

int len = S.length();
int conv[len];

for(int i = 0; i < len; i++){
switch(S[i]){
case 'A':
conv[i] = 1;
break;
case 'C':
conv[i] = 2;
break;
case 'G':
conv[i] = 3;
break;
case 'T':
conv[i] = 4;
break;
}
}

int lenP = P.size();
int ans[lenP];
for(int i = 0; i<lenP; i++){
for(int j = P[i]; j <= Q[i]; j++){
if(ans[i] > conv[j] || ans[i] == 0){
ans[i] = conv[j];
}
}
}
vector<int> ansP;
for(int i = 0; i < lenP; i++){
ansP.push_back(ans[i]);
}
return ansP;
}

lion137
Jeszcze kod w znaczniki prosimy:)
GS
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 4 godziny
  • Postów:1265
0
TheManOfUselessness napisał(a):

vector<int> solution(string &S, vector<int> &P, vector<int> &Q) {

int len = S.length();
int conv[len];

for(int i = 0; i < len; i++){
switch(S[i]){
case 'A':
conv[i] = 1;
break;
case 'C':
conv[i] = 2;
break;
case 'G':
conv[i] = 3;
break;
case 'T':
conv[i] = 4;
break;
}
}

int lenP = P.size();
int ans[lenP];
for(int i = 0; i<lenP; i++){
for(int j = P[i]; j <= Q[i]; j++){
if(ans[i] > conv[j] || ans[i] == 0){
ans[i] = conv[j];
}
}
}
vector<int> ansP;
for(int i = 0; i < lenP; i++){
ansP.push_back(ans[i]);
}
return ansP;
}

Na przyszłość sformatuj kod przed wysłaniem posta.

W Twoim kodzie nie ma pewności, że ans[i] będzie wypełnione dla każdego i, tylko dla i spełniających warunek:

Kopiuj
ans[i] > conv[j] || ans[i] == 0

zatem czasami wrzucasz jakieś przypadkowe wartości.

Zresztą już w samym warunku masz błąd, bo w iteracji i sprawdzasz wartość ans[i], jeszcze przez jej wypełnieniem po raz pierwszy.

edytowany 1x, ostatnio: GutekSan
TM
Myślałem że przy tworzeniu tablicy jest ona automatycznie wypełniana 0, dlatego w moim warunku mam "|| ans[i] == 0", dzięki za odpowiedź c:
TM
Ok, ponowiłem testy, wszystkie przeszły poprawnie, wielkie dzięki za pomoc C:
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
1

Sformatowane i otoczone znacznikami kodu:

Kopiuj
vector<int> solution(string& S, vector<int>& P, vector<int>& Q)
{
    int len = S.length();
    int conv[len];

    for (int i = 0; i < len; i++) {
        switch (S[i]) {
        case 'A':
            conv[i] = 1;
            break;
        case 'C':
            conv[i] = 2;
            break;
        case 'G':
            conv[i] = 3;
            break;
        case 'T':
            conv[i] = 4;
            break;
        }
    }

    int lenP = P.size();
    int ans[lenP];
    for (int i = 0; i < lenP; i++) {
        for (int j = P[i]; j <= Q[i]; j++) {
            if (ans[i] > conv[j] || ans[i] == 0) {
                ans[i] = conv[j];
            }
        }
    }
    vector<int> ansP;
    for (int i = 0; i < lenP; i++) {
        ansP.push_back(ans[i]);
    }
    return ansP;
}

Swoją drogą niby co ten kod robi? Nazwy są takie, że nic nie wiadomo, poza tym, że coś rozwiązuje (jak każdy kod chyba).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
CZ
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:2325
1

Własnie, nie zawsze to ans[i] jest czyms inicjalizowane, bo nie zawsze wchodzi do ifa w zwiazku z tym czasem w pamięci znajdują się śmieci

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
1

Nie łatwiej tak?

Kopiuj
int conv[len] = {};

inna sprawa, że to VLA, więc to nie jest poprawny C++...


edytowany 1x, ostatnio: kq

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.