Я хочу скопировать Skip
и Take
из C# в C ++ для создания фрагментов. Примерно так:
std::vector<int> numbers = { 59, 82, 70, 56, 92, 98, 85 };
auto slice = grades.skip(3).take(2); // {56, 92}
После проверки работы срезов в JS и Golang я в основном понимаю, что они предпочитают теневое копирование, а не глубокое. Я понимаю компромисс между выделением новой памяти, но наличием независимых данных и связанными данными путем копирования только ссылки.
Теперь я также проверил Пропустить и Взять , но Я не могу найти, какой из них они используют.
Короче говоря, они возвращают какой-то Enumerator в начале и в конце? Или они создают совершенно новый IEnumerable?
Edit
Итак, я не знал, что мы можем получить доступ к исходному коду (упоминается в комментариях). И, видимо, возвращает итератор:
public static IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count) {
if (source == null) throw Error.ArgumentNull("source");
return SkipIterator<TSource>(source, count);
}
}