CAtlArray – třída
Tato třída implementuje objekt pole.
Syntaxe
template<typename E, class ETraits = CElementTraits<E>>
class CAtlArray
Parametry
E
Typ dat, která mají být uložena v poli.
ETraits
Kód použitý ke kopírování nebo přesouvání prvků.
Členové
Metody
Function | Popis |
---|---|
Přidat | Voláním této metody přidáte prvek do objektu pole. |
Připojit | Voláním této metody přidáte obsah jednoho pole na konec druhé. |
AssertValid | Voláním této metody potvrďte platnost objektu pole. |
CAtlArray | Konstruktor |
~CAtlArray | Destruktor. |
Kopírování | Voláním této metody zkopírujete prvky jednoho pole do druhého. |
FreeExtra | Voláním této metody odeberete všechny prázdné prvky z pole. |
GetAt | Voláním této metody načtěte jeden prvek z objektu pole. |
GetCount | Voláním této metody vrátíte počet prvků uložených v poli. |
GetData | Voláním této metody vrátíte ukazatel na první prvek v poli. |
InsertArrayAt | Voláním této metody vložíte jedno pole do druhého. |
InsertAt | Voláním této metody vložíte do objektu pole nový prvek (nebo více kopií elementu). |
IsEmpty | Voláním této metody otestujete, zda je pole prázdné. |
RemoveAll | Voláním této metody odeberete všechny prvky z objektu pole. |
RemoveAt | Voláním této metody odeberete jeden nebo více prvků z pole. |
Nastavit | Voláním této metody nastavíte hodnotu prvku v maticovém objektu. |
SetAtGrow | Voláním této metody nastavíte hodnotu prvku v objektu pole a rozbalíte pole podle potřeby. |
SetCount | Voláním této metody nastavíte velikost objektu pole. |
Operátory
Operátor | Popis |
---|---|
operator [] |
Voláním tohoto operátoru vrátíte odkaz na prvek v poli. |
Typedefs
Typedef | Popis |
---|---|
INARGTYPE | Datový typ, který se má použít pro přidání prvků do pole. |
OUTARGTYPE | Datový typ, který se má použít pro načtení prvků z pole. |
Poznámky
CAtlArray
poskytuje metody pro vytváření a správu pole prvků uživatelem definovaného typu. I když se podobá standardním polím jazyka C, CAtlArray
objekt se může dynamicky zmenšovat a podle potřeby zvětšit. Index pole vždy začíná na pozici 0 a horní mez lze opravit nebo povolit rozbalení při přidání nových prvků.
Pro pole s malým počtem prvků lze použít ATL třídy CSimpleArray .
CAtlArray
úzce souvisí s třídou MFC CArray
a bude pracovat v projektu MFC, i když bez podpory serializace.
Další informace naleznete v tématu ATL Collection Classes.
Požadavky
Hlavička: atlcoll.h
CAtlArray::Add
Voláním této metody přidáte prvek do objektu pole.
size_t Add(INARGTYPE element);
size_t Add();
Parametry
element
Prvek, který má být přidán do pole.
Návratová hodnota
Vrátí index přidaného prvku.
Poznámky
Nový prvek se přidá na konec pole. Pokud není k dispozici žádný prvek, přidá se prázdný prvek; to znamená, že pole se zvětší, jako by byl přidán skutečný prvek. Pokud operace selže, atlThrow je volána s argumentem E_OUTOFMEMORY.
Příklad
// Declare an array of integers
CAtlArray<int> iArray;
iArray.Add(1); // element 0
iArray.Add(2); // element 1
iArray.Add(); // element 2
ATLASSERT(iArray.GetCount() == 3);
CAtlArray::Append
Voláním této metody přidáte obsah jednoho pole na konec druhé.
size_t Append(const CAtlArray<E, ETraits>& aSrc);
Parametry
aSrc
Pole, které se má připojit.
Návratová hodnota
Vrátí index prvního připojeného prvku.
Poznámky
Prvky v zadaném poli se přidají na konec existujícího pole. V případě potřeby bude paměť přidělena tak, aby vyhovovala novým prvkům.
Matice musí být stejného typu a není možné k sobě připojit matici.
V buildech ladění bude vyvolán atlasSERT, pokud CAtlArray
argument není platným polem nebo pokud aSrc odkazuje na stejný objekt. V buildech vydaných verzí můžou neplatné argumenty vést k nepředvídatelným chováním.
Příklad
// Declare two integer arrays
CAtlArray<int> iArray1,iArray2;
iArray1.Add(1); // element 0
iArray1.Add(2); // element 1
iArray2.Add(3); // element 0
iArray2.Add(4); // element 1
// Append iArray2 to iArray1
iArray1.Append(iArray2);
ATLASSERT(iArray1.GetCount() == 4);
CAtlArray::AssertValid
Voláním této metody potvrďte platnost objektu pole.
void AssertValid() const;
Poznámky
Pokud objekt pole není platný, vyvolá ATLASSERT kontrolní výraz. Tato metoda je k dispozici pouze v případě, že je definována _DEBUG.
Příklad
CAtlArray<float> fArray;
// AssertValid only exists in debug builds
#ifdef _DEBUG
fArray.AssertValid();
#endif
CAtlArray::CAtlArray
Konstruktor
CAtlArray() throw();
Poznámky
Inicializuje objekt pole.
Příklad
CAtlArray<int> iArray;
CAtlArray::~CAtlArray
Destruktor.
~CAtlArray() throw();
Poznámky
Uvolní všechny prostředky používané objektem pole.
CAtlArray::Copy
Voláním této metody zkopírujete prvky jednoho pole do druhého.
void Copy(const CAtlArray<E, ETraits>& aSrc);
Parametry
aSrc
Zdroj elementů, které se mají zkopírovat do pole.
Poznámky
Voláním této metody přepíšete prvky jednoho pole prvky jiného pole. V případě potřeby bude paměť přidělena tak, aby vyhovovala novým prvkům. Prvky pole není možné kopírovat do sebe.
Pokud chcete zachovat existující obsah pole, použijte místo toho CAtlArray::Append .
V sestaveních ladění bude vyvolán ATLASSERT, pokud existující CAtlArray
objekt není platný nebo pokud aSrc odkazuje na stejný objekt. V buildech vydaných verzí můžou neplatné argumenty vést k nepředvídatelným chováním.
Poznámka:
CAtlArray::Copy
nepodporuje pole skládající se z elementů vytvořených pomocí CAutoPtr třídy.
Příklad
CAtlArray<int> iArrayS, iArrayT;
iArrayS.Add(1);
iArrayS.Add(2);
iArrayT.Add(3);
iArrayT.Add(4);
iArrayT.Copy(iArrayS);
ATLASSERT(iArrayT.GetCount() == 2);
ATLASSERT(iArrayT[0] == 1);
ATLASSERT(iArrayT[1] == 2);
CAtlArray::FreeExtra
Voláním této metody odeberete všechny prázdné prvky z pole.
void FreeExtra() throw();
Poznámky
Všechny prázdné prvky se odeberou, ale velikost a horní mez pole zůstanou beze změny.
V ladicích buildech se vyvolá atlasSERT, pokud objekt CAtlArray není platný nebo pokud pole překročí jeho maximální velikost.
CAtlArray::GetAt
Voláním této metody načte jeden prvek z objektu pole.
const E& GetAt(size_t iElement) const throw();
E& GetAt(size_t iElement) throw();
Parametry
iElement
Hodnota indexu prvku pole, který se má vrátit.
Návratová hodnota
Vrátí odkaz na požadovaný prvek pole.
Poznámky
V ladicích buildech se vyvolá atlasSERT, pokud iElement překročí počet prvků v poli. V buildech vydaných verzí může neplatný argument vést k nepředvídatelným chováním.
Příklad
// Declare an array of integers
CAtlArray<int> iMyArray;
int element;
// Add ten elements to the array
for (int i = 0; i < 10; i++)
{
iMyArray.Add(i);
}
// Use GetAt and SetAt to modify
// every element in the array
for (size_t i = 0; i < iMyArray.GetCount(); i++)
{
element = iMyArray.GetAt(i);
element *= 10;
iMyArray.SetAt(i, element);
}
CAtlArray::GetCount
Voláním této metody vrátíte počet prvků uložených v poli.
size_t GetCount() const throw();
Návratová hodnota
Vrátí počet prvků uložených v poli.
Poznámky
Protože první prvek v poli je na pozici 0, hodnota vrácená GetCount
vždy je 1 větší než největší index.
Příklad
Podívejte se na příklad pro CAtlArray::GetAt.
CAtlArray::GetData
Voláním této metody vrátíte ukazatel na první prvek v poli.
E* GetData() throw();
const E* GetData() const throw();
Návratová hodnota
Vrátí ukazatel na umístění paměti, do které je uložen první prvek v poli. Pokud nejsou k dispozici žádné prvky, vrátí se hodnota NULL.
Příklad
// Define an array of integers
CAtlArray<int> MyArray;
// Define a pointer
int* pData;
// Allocate enough space for 32 elements
// with buffer increase to be calculated
// automatically
MyArray.SetCount(32, -1);
// Set the pointer to the first element
pData = MyArray.GetData();
// Set array values directly
for (int j = 0; j < 32; j++, pData++)
{
*pData = j * 10;
}
CAtlArray::INARGTYPE
Datový typ, který se má použít pro přidání prvků do pole.
typedef ETraits::INARGTYPE INARGTYPE;
CAtlArray::InsertArrayAt
Voláním této metody vložíte jedno pole do druhého.
void InsertArrayAt(size_t iStart, const CAtlArray<E, ETraits>* paNew);
Parametry
iStart
Index, na který má být pole vloženo.
paNew
Pole, které se má vložit.
Poznámky
Elementy z pole paNew se zkopírují do objektu pole počínaje elementem iStart. Existující prvky pole se přesunou, aby se nepřepsaly.
V sestaveních ladění bude vyvolán ATLASSERT, pokud CAtlArray
objekt není platný nebo pokud je ukazatel paNew null nebo neplatný.
Poznámka:
CAtlArray::InsertArrayAt
nepodporuje pole skládající se z elementů vytvořených pomocí CAutoPtr třídy.
Příklad
// Define two integer arrays
CAtlArray<int> iTargetArray, iSourceArray;
// Add elements to first array
for (int x = 0; x < 10; x++)
{
iTargetArray.Add(x);
}
// Add elements to the second array
for (int x = 0; x < 10; x++)
{
iSourceArray.Add(x * 10);
}
// Insert the Source array into the Target
// array, starting at the 5th element.
iTargetArray.InsertArrayAt(5, &iSourceArray);
CAtlArray::InsertAt
Voláním této metody vložíte do objektu pole nový prvek (nebo více kopií elementu).
void InsertAt(size_t iElement, INARGTYPE element, size_t nCount = 1);
Parametry
iElement
Index, do kterého se má prvek nebo prvky vložit.
element
Hodnota prvku nebo prvků, které se mají vložit.
nCount
Počet prvků, které chcete přidat.
Poznámky
Vloží jeden nebo více prvků do pole počínaje indexem iElement. Existující prvky se přesunou, aby se nepřepsaly.
V ladicím sestavení bude vyvolán ATLASSERT, pokud CAtlArray
je objekt neplatný, počet prvků, které se mají přidat, je nula nebo kombinovaný počet prvků je příliš velký, aby pole obsahovalo. V maloobchodních buildech může předání neplatných parametrů způsobit nepředvídatelné výsledky.
Příklad
// Declare an array of integers
CAtlArray<int> iBuffer;
// Add elements to the array
for (int b = 0; b < 10; b++)
{
iBuffer.Add(0);
}
// Instert ten 1's into the array
// at position 5
iBuffer.InsertAt(5, 1, 10);
CAtlArray::IsEmpty
Voláním této metody otestujete, zda je pole prázdné.
bool IsEmpty() const throw();
Návratová hodnota
Vrátí hodnotu true, pokud je pole prázdné, jinak nepravda.
Poznámky
Pole je řečeno, že je prázdné, pokud neobsahuje žádné prvky. Proto i když pole obsahuje prázdné prvky, není prázdné.
Příklad
// Define an array of chars
CAtlArray<char> cArray;
// Add an element
cArray.Add('a');
// Confirm array is not empty
ATLASSERT(!cArray.IsEmpty());
// Remove all elements
cArray.RemoveAll();
// Confirm array is empty
ATLASSERT(cArray.IsEmpty());
CAtlArray::operator []
Voláním tohoto operátoru vrátíte odkaz na prvek v poli.
E& operator[](size_t ielement) throw();
const E& operator[](size_t ielement) const throw();
Parametry
iElement
Hodnota indexu prvku pole, který se má vrátit.
Návratová hodnota
Vrátí odkaz na požadovaný prvek pole.
Poznámky
Provede podobnou funkci jako CAtlArray::GetAt. Na rozdíl od třídy MFC CArray nelze tento operátor použít jako náhradu za CAtlArray::SetAt.
V sestaveních ladění bude vyvolána funkce ATLASSERT, pokud iElement překročí celkový počet prvků v poli. V maloobchodních buildech může neplatný parametr způsobit nepředvídatelné výsledky.
CAtlArray::OUTARGTYPE
Datový typ, který se má použít pro načtení prvků z pole.
typedef ETraits::OUTARGTYPE OUTARGTYPE;
CAtlArray::RemoveAll
Voláním této metody odeberete všechny prvky z objektu pole.
void RemoveAll() throw();
Poznámky
Odebere všechny prvky z objektu pole.
Tato metoda volá CAtlArray::SetCount změnit velikost pole a následně uvolní všechny přidělené paměti.
Příklad
Podívejte se na příklad pro CAtlArray::IsEmpty.
CAtlArray::RemoveAt
Voláním této metody odeberete jeden nebo více prvků z pole.
void RemoveAt(size_t iElement, size_t nCount = 1);
Parametry
iElement
Index prvního prvku, který chcete odebrat.
nCount
Počet prvků, které chcete odebrat.
Poznámky
Odebere z pole jeden nebo více prvků. Všechny zbývající prvky jsou posunuty dolů. Horní mez je dekrementována, ale paměť není uvolněna, dokud se nevyvolá volání CAtlArray::FreeExtra .
V sestaveních ladění bude vyvolán ATLASSERT, pokud CAtlArray
objekt není platný, nebo pokud kombinovaný součet iElement a nCount překročí celkový počet prvků v poli. V maloobchodních buildech můžou neplatné parametry způsobit nepředvídatelné výsledky.
Příklad
// Declare an array of chars
CAtlArray<char> cMyArray;
// Add ten elements to the array
for (int a = 0; a < 10; a++)
{
cMyArray.Add('*');
}
// Remove five elements starting with
// the element at position 1
cMyArray.RemoveAt(1, 5);
// Free memory
cMyArray.FreeExtra();
// Confirm size of array
ATLASSERT(cMyArray.GetCount() == 5);
CAtlArray::SetAt
Voláním této metody nastavíte hodnotu prvku v maticovém objektu.
void SetAt(size_t iElement, INARGTYPE element);
Parametry
iElement
Index odkazující na prvek pole, který se má nastavit.
element
Nová hodnota zadaného prvku.
Poznámky
V ladicích buildech se vyvolá atlasSERT, pokud iElement překročí počet prvků v poli. V maloobchodních buildech může neplatný parametr vést k nepředvídatelným výsledkům.
Příklad
Podívejte se na příklad pro CAtlArray::GetAt.
CAtlArray::SetCount
Voláním této metody nastavíte velikost objektu pole.
bool SetCount(size_t nNewSize, int nGrowBy = - 1);
Parametry
nNewSize
Požadovaná velikost pole.
nGrowBy
Hodnota použitá k určení velikosti vyrovnávací paměti. Hodnota -1 způsobí, že se použije interně vypočítaná hodnota.
Návratová hodnota
Vrátí hodnotu true, pokud je pole úspěšně změněno, jinak nepravda.
Poznámky
Pole lze zvětšit nebo zmenšit. Při zvýšení se do pole přidají nadbytečné prázdné prvky. Pokud dojde ke snížení, odstraní se prvky s největšími indexy a uvolní paměť.
Tuto metodu použijte k nastavení velikosti pole před použitím. Pokud SetCount
se nepoužije, proces přidání prvků a následné přidělení paměti sníží výkon a paměť fragmentů.
Příklad
Podívejte se na příklad pro CAtlArray::GetData.
CAtlArray::SetAtGrow
Voláním této metody nastavíte hodnotu prvku v objektu pole a rozbalíte pole podle potřeby.
void SetAtGrow(size_t iElement, INARGTYPE element);
Parametry
iElement
Index odkazující na prvek pole, který se má nastavit.
element
Nová hodnota zadaného prvku.
Poznámky
Nahradí hodnotu prvku, na který odkazuje index. Pokud je iElement větší než aktuální velikost pole, pole se automaticky zvýší pomocí volání CAtlArray::SetCount. V sestaveních ladění bude vyvolán ATLASSERT, pokud CAtlArray
objekt není platný. V maloobchodních buildech můžou neplatné parametry způsobit nepředvídatelné výsledky.
Příklad
// Declare an array of integers
CAtlArray<int> iGrowArray;
// Add an element
iGrowArray.Add(0);
// Add an extra element at position 19.
// This will grow the array to accommodate.
iGrowArray.SetAtGrow(19, 0);
// Confirm size of new array
ATLASSERT(iGrowArray.GetCount() == 20);
// Note: the values at position 1 to 18
// are undefined.
Viz také
Ukázka MMXSwarm
Ukázka DynamicConsumer
Ukázka updatePV
Ukázka výběru
CArray – třída
Přehled třídy