Telegram Group & Telegram Channel
std::span — мощная альтернатива std::vector и std::array

Сегодня поговорим о std::span — контейнере, который делает работу с массивами и векторами в C++ более удобной и эффективной. 🚀

Проблема: Лишние копии данных
Представьте, что у нас есть функция, принимающая массив чисел:


void processArray(const std::vector<int>& arr) {
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
}


С одной стороны, передача const std::vector<int>& предотвращает копирование, но что, если у нас массив std::array или сырой int[]?
Придётся перегружать функцию или копировать данные в std::vector.

Решение: Используем std::span
std::span позволяет передавать любой диапазон (`std::vector`, std::array, сырые массивы) без копирования:


#include <iostream>
#include <span>
#include <vector>
#include <array>

void processArray(std::span<int> arr) {
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
}

int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::array<int, 5> arr = {6, 7, 8, 9, 10};
int rawArr[] = {11, 12, 13, 14, 15};

processArray(vec); // Работает
processArray(arr); // Работает
processArray(rawArr); // Работает
}


🚀 Преимущества std::span
Не копирует данные — передаётся как ссылка
Работает с любыми последовательностями
Гибкость — можно создавать срезы без копий

Пример использования .subspan(), чтобы передавать часть массива:


std::vector<int> vec = {1, 2, 3, 4, 5};
std::span<int> sp = vec;
processArray(sp.subspan(2)); // Выведет: 3 4 5


⚠️ Важно
- std::span не владеет данными. Убедитесь, что исходные данные живут дольше span.
- Не поддерживает автоматическое изменение размера, как std::vector.

📌 Итог
Если ваша функция принимает std::vector<int>&, std::array<int, N>&, int[] или даже std::initializer_list<int>, замените их на std::span<int>! Это сделает код более гибким и эффективным. 🔥

➡️ @cpp_geek



tg-me.com/cpp_geek/288
Create:
Last Update:

std::span — мощная альтернатива std::vector и std::array

Сегодня поговорим о std::span — контейнере, который делает работу с массивами и векторами в C++ более удобной и эффективной. 🚀

Проблема: Лишние копии данных
Представьте, что у нас есть функция, принимающая массив чисел:


void processArray(const std::vector<int>& arr) {
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
}


С одной стороны, передача const std::vector<int>& предотвращает копирование, но что, если у нас массив std::array или сырой int[]?
Придётся перегружать функцию или копировать данные в std::vector.

Решение: Используем std::span
std::span позволяет передавать любой диапазон (`std::vector`, std::array, сырые массивы) без копирования:


#include <iostream>
#include <span>
#include <vector>
#include <array>

void processArray(std::span<int> arr) {
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
}

int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::array<int, 5> arr = {6, 7, 8, 9, 10};
int rawArr[] = {11, 12, 13, 14, 15};

processArray(vec); // Работает
processArray(arr); // Работает
processArray(rawArr); // Работает
}


🚀 Преимущества std::span
Не копирует данные — передаётся как ссылка
Работает с любыми последовательностями
Гибкость — можно создавать срезы без копий

Пример использования .subspan(), чтобы передавать часть массива:


std::vector<int> vec = {1, 2, 3, 4, 5};
std::span<int> sp = vec;
processArray(sp.subspan(2)); // Выведет: 3 4 5


⚠️ Важно
- std::span не владеет данными. Убедитесь, что исходные данные живут дольше span.
- Не поддерживает автоматическое изменение размера, как std::vector.

📌 Итог
Если ваша функция принимает std::vector<int>&, std::array<int, N>&, int[] или даже std::initializer_list<int>, замените их на std::span<int>! Это сделает код более гибким и эффективным. 🔥

➡️ @cpp_geek

BY C++ geek


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_geek/288

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

At a time when the Indian stock market is peaking and has rallied immensely compared to global markets, there are companies that have not performed in the last 10 years. These are definitely a minor portion of the market considering there are hundreds of stocks that have turned multibagger since 2020. What went wrong with these stocks? Reasons vary from corporate governance, sectoral weakness, company specific and so on. But the more important question is, are these stocks worth buying?

NEWS: Telegram supports Facetime video calls NOW!

Secure video calling is in high demand. As an alternative to Zoom, many people are using end-to-end encrypted apps such as WhatsApp, FaceTime or Signal to speak to friends and family face-to-face since coronavirus lockdowns started to take place across the world. There’s another option—secure communications app Telegram just added video calling to its feature set, available on both iOS and Android. The new feature is also super secure—like Signal and WhatsApp and unlike Zoom (yet), video calls will be end-to-end encrypted.

telegram from cn


Telegram C++ geek
FROM USA