Sıranınız bir diziye dayanıyorsa, o zaman verimlilik için, sıranın maksimum boyutunun sabit olduğu sınırlı ve "dairesel" bir sıra oluşturulmasını öneririm ve temel olarak bir baş ve kuyruk işaretçisine sahip olursunuz Bu, kuyruğun dizisindeki "ilk" ve "son" konumlarına işaret eder ve kuyruk işaretçisi (veya bir indeks değeri) dizinin sonuna "geçmiş" bir konuma hareket ettiğinde, aslında geri başlangıcına gider. dizi. Bir diziyi temel alan sınırsız bir sıra, dizinin maksimum boyutunu her doldurduğunuzda hafızayı yeniden tutmaya ihtiyaç duyacağınız ve/veya ilkini kaldırdığınızda dizinin altındaki öğeleri yeniden karıştırmaya çalıştığınız için çok verimsiz olur. sıranın elemanı.
kullanma ayrılmaz tipi dizisi head
için endeksler ve bir Sıranızdaki öğelerin toplam sayısını belirlemek için sayaç, senin enqueue ve dequeue fonksiyonları ile birlikte oldukça gerçek işaretçi türlerinden daha tail
, görünebilir kadar basit:
template<typename T>
bool queue<T>::enqueue(const T& item)
{
if (count == array_size)
return false;
array[tail] = item;
tail = (tail + 1) % array_size;
count++;
return true;
}
template<typename T>
bool queue<T>::dequeue(T& item)
{
if (!count)
return false;
item = array[head];
head = (head + 1) % array_size;
count--;
return true;
}
Bu konsepti, istediğiniz diğer işlevlere, yani, STL'nin sıraya erişim için kullandığı ve aslında bir öğenin sıradan "kaldırıldığı" gibi ayrı bir işlev kullanmasını istiyorsanız, genişletebilirsiniz.
bu ödev mi? –
Eğer onu sıfırdan uygulamaya yetecek kadar anlamıyorsanız, gösterdiğiniz gibi 'std' sürümünü kullanmaya devam edin. Eğer bu ev ödevi ise, ilk önce bir sıranın ilk sırada olduğunu unutmayın. –
İfadenize, "basit bir sırayı nasıl uygulayacağınızı bildiğiniz" konusunda itiraz ediyorum. Şimdiye kadar sadece "queue" adında bir kütüphane sınıfı kullanabileceğinizi gösterdiniz. –