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

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

Восстановить пароль Регистрация
 
snayperAlfa
2 / 2 / 0
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 16:25     Скорость функций с ссылками #1
Всем привет. Интересует способ организации функции для более быстрого передачи данных.

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

Вариант 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;  
};

Подозреваю что первый вариант будет быстрее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2011, 16:25     Скорость функций с ссылками
Посмотрите здесь:

C++ Работа со ссылками
Разъясните ситуацию с ссылками. C++
C++ ошибка со ссылками на классы
C++ работа с ссылками
C++ Работа с ссылками
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
4925 / 2505 / 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
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
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++ Работа с указателями и ссылками

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

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

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