Giriş
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar dizileri döndürmeyi gösteriyor.
Genel Kural
Rotate algoritmalarında genel kural şöyledir
std::rotate metodu
İlk parametre rotate işleminin hangi kaynak nesneden başladığını belirtir.
İkinci parametre rotate işleminin hangi kaynak nesnede biteceğini belirtir.
Üçüncü parametre rotate işleminin hangi hedef nesneden başlayacağını belirtir.
Örnek
C# ile şöyle yaparız. temp[] dizisine rotate edilecek elemanlar kopyalanır. Sonre gelene elemenlar baştakileri ezer, En son temp tekrar kopyalanır.
İlk rakamı en sona almak istersek şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle.
C# ile şöyle yaparız. d parametresi kaç defa rotate edileceğini belirtir.
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar dizileri döndürmeyi gösteriyor.
Genel Kural
Rotate algoritmalarında genel kural şöyledir
public static IEnumerable<T> Shift<T>(this T[] source, int count)
{
for (int i = 0; i < source.Length; i++)
{
var j =
count > 0
? (i + count) % source.Length
: (i + count + source.Length) % source.Length;
yield return source[j];
}
}
std::rotate metodu
İlk parametre rotate işleminin hangi kaynak nesneden başladığını belirtir.
İkinci parametre rotate işleminin hangi kaynak nesnede biteceğini belirtir.
Üçüncü parametre rotate işleminin hangi hedef nesneden başlayacağını belirtir.
Örnek
C# ile şöyle yaparız. temp[] dizisine rotate edilecek elemanlar kopyalanır. Sonre gelene elemenlar baştakileri ezer, En son temp tekrar kopyalanır.
public static int[] rotLeft(int[] a, int d)
{
int[] temp = new int[d];
for (int i = 0; i < d; i++)
temp[i] = a[i];
for (int i = d; i < a.Length; i++)
{
a[i - d] = a[i];
}
for (int i = 0; i < d; i++)
a[a.Length - d + i] = temp[i];
return a;
}
Örnekİlk rakamı en sona almak istersek şöyle yaparız.
unsigned long long n = 1934;
std::string s = std::to_string(n);
std::rotate(s.begin(), s.begin() + 1, s.end()); // left rotation
n = std::stoull(s);
std::cout << n; // 9341
ÖrnekŞöyle yaparız.
std::rotate(l.begin(), std::next(l.begin()), l.end());
std::rotate_copy metoduAçıklaması şöyle.
if 2 left rotations are performed on array [1,2,3,4,5], then the array would become [3,4,5,1,2]Örnek
C# ile şöyle yaparız. d parametresi kaç defa rotate edileceğini belirtir.
public static int[] rotLeft(int[] a, int d)
{
int[] result = new int[a.Length];
for (int i = d; i < a.Length; i++)
{
result[i - d] = a[i];
}
for (int j = 0; j < d; j++)
{
result[a.Length - d + j] = a[j];
}
return result;
}
Hiç yorum yok:
Yorum Gönder