Al momento sto avendo una scoreggia cerebrale e sto cercando un modo veloce per prendere un array e passare metà di esso a una funzione. Se avessi un array A di dieci elementi, in alcune lingue potrei passare qualcosa come A [5:] alla funzione ed essere fatto con esso. Esiste un costrutto simile in C++? Ovviamente mi piacerebbe evitare e una sorta di funzione di looping.C'è un modo in C++ per ottenere un sub-array da un array?
risposta
Sì. In C normale si usano puntatori, ma in C++ è possibile utilizzare qualsiasi tipo di iteratore (un puntatore può essere considerato un iteratore).
template<typename Iter>
void func(Iter arr, size_t len) { ... }
int main() {
int arr[10];
func(arr, 10); // whole array
func(arr, 5); // first five elements
func(arr + 5, 5); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.size()); // All elements
func(vec.begin(), 5); // first five
func(vec.begin() + 5, vec.size() - 5); // all but first 5
return 0;
}
Il tipico trucco è quello di passare un puntatore al primo elemento della matrice, e quindi utilizzare un argomento separato per passare la lunghezza della matrice. Sfortunatamente non ci sono controlli sui limiti, quindi devi stare attento a farlo bene o scarabocchiare sulla tua memoria.
È inoltre possibile utilizzare intervalli semiaperti. Questo è il modo più comune per farlo. Molte funzioni nella libreria standard (come std::sort
) funzionano in questo modo.
template<class Iter>
void func(Iter start, Iter end) { ... }
int main() {
int arr[10];
func(arr, arr + 10); // whole array
func(arr, arr + 5); // first five elements
func(arr + 5, arr + 10); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.end()); // whole vector
func(vec.begin(), vec.begin() + 5); // first five elements
func(vec.begin() + 5, vec.end()); // all but the first five elements
return 0;
}
Ancora, nessun controllo di limiti.
Penso che il template di cui stavi parlando sia: 'modello
Solo 'template
se vuoi controllare i limiti usa l'accesso controllato-controllato, '& vec.at (5)', o 'vec.begin() + max (5, vec.size())' se '5' è in realtà 'al massimo 5' . – jthill
- 1. Come ottenere un subArray da Swift 2.0
- 2. Ordina array multidimensionali per valore chiave subarray
- 3. Esiste un modo per ottenere una virgola mobile da un array?
- 4. È possibile ottenere un IntPtr da un array int []?
- 5. PHP Ordina array SubArray Valore
- 6. Il metodo migliore per creare un sotto array da un array in C
- 7. C'è un modo per dedurre un tipo di un singolo elemento di un array in C++
- 8. Trova un array all'interno di un altro array più grande
- 9. Il modo migliore per spostare un array in C?
- 10. C/C++: un modo per ottenere enumerazioni riflessive?
- 11. Ottenere un oggetto immagine da un array di byte
- 12. Qual è il modo migliore per creare un sub array da una matrice esistente in C++?
- 13. riempire un array in C#
- 14. C#: c'è un modo per forzare un suggerimento da mostrare?
- 15. Come ottenere valore casuale da un array
- 16. Come ottenere un array di byte da C# a un componente WinRT C++
- 17. Esiste un modo rapido per eliminare un valore specifico da un array in Javascript?
- 18. Ottenere valori casuali da un array
- 19. Come ottenere elementi casuali da un array
- 20. Ottenere dati da un microfono in C#
- 21. Passa un array da javascript a C#
- 22. Dividere un array in 2 array C#
- 23. C'è un modo per definire un array costante in PHP?
- 24. C++ 11, 14 o 17 fornisce un modo per ottenere solo gli argomenti da un decltype()?
- 25. Passare un array per riferimento in C?
- 26. Hashing un array in C#
- 27. C'è un modo migliore per trasporre un array 2D PHP?
- 28. C'è un modo in C# per replicare un '#ifndef _DEBUG' da C/C++?
- 29. funzione per convertire un array per un array associativo
- 30. C'è un modo per creare un array con una lunghezza variabile in c?
Forse la tua funzione dovrebbe richiedere iteratori. – chris
Non è possibile passare gli array alle funzioni in C++ poiché C++ non ha valori di array. Quindi, che cosa effettivamente prende la tua funzione? – melpomene
Avrei un array int [] a = {1,2,3,4,5,6,7,8,9,10}. Sto quindi cercando un modo per ottenere un sub array int [] a1 = {6,7,8,9,10}. –