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.
int_buffer (se delegating constructor), insert-funktionen.int_buffer.cppint_sorted.cpp. sort är en av de sista funktionerna du skriver.int_sorted. Du måste försäkra dig om att detta inte leder till oändlig rekursion.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.
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
Vad gör nyckelordet explicit? Vilka slags satser/uttryck förbjuds?
Vad innebär &&, vilka typkategorier passar in på &&. Vad kallas &&?
Hur fungerar copy-swap-idiomet? Vem städar vad?
Hur kan de två tilldelningsoperatorerna ersättas med den enda int_buffer& operator=(int_buffer rhs);
När används const-varianterna av en medlemsfunktion då båda finns definierade?
Skriv kodsnuttar i main() som använder samtliga konstruerare för int_buffer.
Om du har använt std::move så ska den användningen också förklaras.
Den förklaringen är inte: std::move flyttar objektet.
Ni har via ert student-email tillgång tll CLion från JetBrains, planetens bästa utvecklingsmiljö. ANVÄND DEN!