Yineleyiciler ve genel işlevler üzerinde daha iyi bir tutmaya çalışıyorum. container1 < container2 <type> >
'u container3 <type>
'a dönüştüren bir işlev yazmak için yararlı bir egzersiz olacağını düşündüm. Örneğin, vector< deque<int> >
'u list<int>
'a dönüştürebilmelidir. Kapsayıcıların kabını düzleştirmek için genel işlev
<algorithm>
işlevler gibi yineleyicileri üzerinden diye düşünüyordum. İşte
benim kodudur:
int main()
{
using namespace std;
vector< vector<string> > splitlines;
vector<string> flat;
/* some code to fill SPLITLINES with vectors of strings */
flatten(splitlines.begin(), splitlines.end(), back_inserter(flat));
}
Ben büyük C++ şablon hata mesajı
undefined reference to void flatten< ... pages of templates ...
I:
#include <iterator>
#include <algorithm>
// COCiter == Container of Containers Iterator
// Oiter == Output Iterator
template <class COCiter, class Oiter>
void flatten (COCiter start, COCiter end, Oiter dest)
{
using namespace std;
while (start != end) {
dest = copy(start->begin(), start()->end(), dest);
++start;
}
}
Ama şu kodda diyoruz çalıştığınızda Kodumun yazılması çok kolaydı ve iç kaplardaki veri tipinin çıktı kabındaki veri tipiyle eşleştiğinden emin olmak için biraz daha fazla bilgiye ihtiyacım var. Ama ne yapacağımı bilmiyorum.
Not o yığın yineleyicinızı yoktur ve hiçbir/bitiş fonksiyonları başlar. Yığınlarla çalışmak istiyorsanız, kesinlikle bunun için özel bir vakaya sahip olacaksınız. –
Bu doğru; Soruyu değiştireceğim. Aslında yığın uyumluluğuna ihtiyacım yok; sadece tekrarlanabilir kaplar. – japreiss