Czy istnieje sposób w C ++, aby uzyskać pod tablicę z tablicy?


W tej chwili mój mózg puszcza bąki i szukam szybkiego sposobu na pobranie tablicy i przekazanie jej połowy do funkcji. Gdybym miał tablicę A składającą się z dziesięciu elementów, w niektórych językach mógłbym przekazać do funkcji coś takiego jak A [5:] i skończyć z tym. Czy istnieje podobna konstrukcja w języku C ++? Oczywiście chciałbym również uniknąć pewnego rodzaju funkcji zapętlenia.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tak. W zwykłym C używasz wskaźników, ale w C ++ możesz użyć dowolnego typu iteratora (wskaźnik można traktować jako iterator).
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;
}

Typową sztuczką jest przekazanie wskaźnika do pierwszego elementu tablicy, a następnie użycie oddzielnego argumentu do przekazania długości tablicy. Niestety, nie ma kontroli granic, więc musisz uważać, aby to zrobić dobrze, inaczej będziesz zapisywać w pamięci.
Możesz także użyć półotwartych zakresów. To jest najczęstszy sposób na zrobienie tego. W ten sposób działa wiele funkcji w bibliotece standardowej (na przykład
std :: sort
).
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;
}

Znowu nie ma kontroli granic.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem to samo użycie, ale zamiast tego użyłem wektora i użyłem składni
vector <int> a(10);
// for example to use by removing first elementa = std::vector<int>(a.begin() + 1, a.end())
//its ur turn to change the size

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się