Logotyp

Programmeringsmetodik, dt079g

Lokal inloggning

Tips för labb 1

Tips programkod

Allmänna observationer

sort-funktionen finns bara som stöd för int_sorted objekt. Det är inte en funktion som ska anropas från main(), det är en implementationsdetalj.

Jfr:

int main(){
    std::vector v { 6, 3, 4, 1 };
    int_sorted is(v.begin(), v.size());
    sort(is.begin(), is.end());

Säger, is är sorterad och nu ska den sorteras igen.

För att testa sorteringen och merge finns std::is_sorted.

merge-funktionen

Merge-funktionen är egentligen väldigt enkel.

merge(A, B): C
  while(A || B)
    if(A && (!B || *A <= *B)) C << A
    else C << B

Det faktum att vi jobbar med pekare och inte strömmar gör det hela lite bökigare.



Det är inte svårt att skriva om en int_buffer så att den uppför sig som en ström. De operationer som merge behöver är

operator bool()
operator <<
operator *

Så en snabbimplementation av dessa kan se ut som

struct buf_stream{
    buf_stream(int_buffer& buf):first(buf.begin()), last(buf.end()){}
    operator bool (){   return first != last;
    }
    buf_stream& operator << (buf_stream& rhs){
        *this->first++ = *rhs.first++;
        return *this;
    }
    auto size(){  return last - first;}
    auto operator * () -> int&{
        return *first;
    }
    int* first; // borde väl varit privat
    int* last;
};

Nu blir merge enklare att skriva.

Inför redovisning

Du skall kunna förklara flera begrepp ingående. Du ska kunna beskriva och förklara all programkod. I synnerhet den som kommer från labbinstruktionen. Bland annat ska du kunna förklara

Ni har via ert student-email tillgång tll CLion från JetBrains, planetens bästa utvecklingsmiljö. ANVÄND DEN!