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

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

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

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

22.07.2011, 16:25. Просмотров 408. Ответов 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;  
};

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

Работа со ссылками - C++
#include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; int _tmain() { float v1,v2; float S,t; printf(&quot;vvedite rastoyanie i vremya\n&quot;); ...

Работа со ссылками - C++
начал изучать ссылки в с++ вот для примера: a=1, &amp;b=a, a+=2, тогда b=3 а если b = 7 , тогда a = ?

Работа с ссылками - C++
Нужна помощь студенту 1. Объявите (в отельном заголовочном файле) и реализуйте (в другом файле) процедуры (они не возвращают...

Работа со ссылками - C++
Помогите кто-нибудь с этим заданием: переменной Z присвоить значение наибольшего из элементов матрицы {ai,j}4,4, расположенные выше главной...

Работа с ссылками - C++
Помогите, вот составил программу, но надо через ссылки,а я не могу.Вот условие: Найти значение выражения...

Ссылка на структуру с ссылками - C++
Не знаю в чем сложность, но неожиданно проблема Идея такова: есть структура vertex с координатами (ссылки) В дальнейшем появляется...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 / 1
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 16:37  [ТС]     Скорость функций с ссылками #3
О, спасибо!
А что насчет надежности?
CAHTEXHUK
Заблокирован
22.07.2011, 16:40     Скорость функций с ссылками #4
какой надёжности? с виду ошибок нету хз
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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 / 1
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 17:02  [ТС]     Скорость функций с ссылками #6
Цитата Сообщение от fasked Посмотреть сообщение
VectorOutput.resize(VectorOutput.size() + VectorOutput.size() % kratnost, 0);
Так виснет
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
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++
#include &lt;iostream.h&gt; void main(void) { int x=777; int &amp;ir = x; double &amp;dr=x; cout&lt;&lt;&quot; x = &quot;&lt;&lt;x&lt;&lt;endl; ...

Работа с указателями и ссылками - C++
Немного мутный вопрос: каким образом происходит работа с указателями и ссылками? Допустим, есть такой код: int a = 10; int* b =...

ошибка со ссылками на классы - C++
всем привет помогите разобраться пожалуйста!!! пишу программу, где много объектов ссылается друг на друга. и все было хорошо ...

Указатели вместе с ссылками - C++
Добрый день, имеется вот такой прототип функции: void printlab(char**&amp; x); Подскажите, что принимает функция? (указатель?...


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

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

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