Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
snayperAlfa
2 / 2 / 0
Регистрация: 13.08.2008
Сообщений: 84
#1

Скорость функций с ссылками - C++

22.07.2011, 16:25. Просмотров 396. Ответов 7
Метки нет (Все метки)

Всем привет. Интересует способ организации функции для более быстрого передачи данных.

Дана функция которая дополняет вектор битов нулями в конце, если количество бит не кратно некому числу.

Вариант 1:
Используются ссылки.

C++
1
2
3
4
5
6
7
8
9
10
11
private: void static add_bits(const std::vector <boost::uint8_t> & VectorInput, 
std::vector <boost::uint8_t> & VectorOutput,
const boost::uint32_t & kratnost)
{       
    VectorOutput = VectorInput;
 
    while(VectorOutput.size() % kratnost != 0)
    {
                  VectorOutput.push_back(0);
    }       
};
Правильно ли сработает эта функция если вызвать ее так:
C++
1
add_bits(vector1, vector1, 8)
?
То есть когда результат возвращается в источник.
На практике у меня работает все правильно, но у меня сомнения...


Вариант 2:
Без ссылок в возвращаемых параметрах.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
private: static std::vector <boost::uint8_t> add_bits(const std::vector <boost::uint8_t> & VectorInput,
const boost::uint32_t & kratnost)
{       
        std::vector <boost::uint8_t> TempVector;
    TempVector = VectorInput;
 
    while(TempVector.size() % kratnost != 0)
    {
                  TempVector.push_back(0);
    }   
        
        return TempVector;  
};

Подозреваю что первый вариант будет быстрее?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CAHTEXHUK
Заблокирован
22.07.2011, 16:32     Скорость функций с ссылками #2
да,
но если уж так за быстротой гнаться то,
C++
1
2
std::vector <boost::uint8_t> TempVector;
        TempVector = VectorInput;
C++
1
std::vector <boost::uint8_t> TempVector(VectorInput);
snayperAlfa
2 / 2 / 0
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 16:37  [ТС]     Скорость функций с ссылками #3
О, спасибо!
А что насчет надежности?
CAHTEXHUK
Заблокирован
22.07.2011, 16:40     Скорость функций с ссылками #4
какой надёжности? с виду ошибок нету хз
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.07.2011, 16:48     Скорость функций с ссылками #5
C++
1
VectorOutput.resize(VectorOutput.size() + VectorOutput.size() % kratnost, 0);
Ну или хотя бы:
C++
1
2
3
int n = VectorOutput.size() % kratnost;
while (n--)
    VectorOutput.push_back(0);
snayperAlfa
2 / 2 / 0
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 17:02  [ТС]     Скорость функций с ссылками #6
Цитата Сообщение от fasked Посмотреть сообщение
VectorOutput.resize(VectorOutput.size() + VectorOutput.size() % kratnost, 0);
Так виснет
grizlik78
Эксперт С++
 Аватар для grizlik78
1890 / 1422 / 104
Регистрация: 29.05.2011
Сообщений: 2,977
22.07.2011, 17:09     Скорость функций с ссылками #7
Цитата Сообщение от snayperAlfa Посмотреть сообщение
Так виснет
Формула с ошибкой просто. У меня ниже исправильный вариант.

Не знаю, будет ли от этого польза, или вред один, но можно попытаться избежать возможного лишнего перераспределения памяти с помощью функции reserve() :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private: static std::vector <boost::uint8_t> add_bits(const std::vector <boost::uint8_t> & VectorInput,
                 const boost::uint32_t & kratnost)
{
    size_t tail = VectorInput.size() % kratnost;
    size_t new_size = VectorInput.size();
    if (tail != 0)
        new_size += kratnost - tail;
    
    std::vector <boost::uint8_t> TempVector;
    TempVector.reserve(new_size);
    TempVector = VectorInput;
    TempVector.resize(new_size);
 
    return TempVector;      
};
А что касается передачи по ссылке или возврата по значению, то если компилятор умеет оптимизировать возвращаемое значение (все современные распространённые), то разницы быть не должно. Если не умеет, то возврат по значению производит лишнее копирование.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2011, 18:16     Скорость функций с ссылками
Еще ссылки по теме:

C++ Работа со ссылками
Работа с ссылками C++
C++ Работа с указателями и ссылками
C++ Указатели вместе с ссылками
C++ Ссылка на структуру с ссылками

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
snayperAlfa
2 / 2 / 0
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 18:16  [ТС]     Скорость функций с ссылками #8
Я использую Visual Studio 2010.
Yandex
Объявления
22.07.2011, 18:16     Скорость функций с ссылками
Ответ Создать тему
Опции темы

Текущее время: 17:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru