Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

Работа со ссылками - 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++
#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; ...

7
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);
0
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 16:37  [ТС] #3
О, спасибо!
А что насчет надежности?
0
CAHTEXHUK
Заблокирован
22.07.2011, 16:40 #4
какой надёжности? с виду ошибок нету хз
0
fasked
Эксперт С++
4948 / 2528 / 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);
0
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 17:02  [ТС] #6
Цитата Сообщение от fasked Посмотреть сообщение
VectorOutput.resize(VectorOutput.size() + VectorOutput.size() % kratnost, 0);
Так виснет
0
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,020
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;      
};
А что касается передачи по ссылке или возврата по значению, то если компилятор умеет оптимизировать возвращаемое значение (все современные распространённые), то разницы быть не должно. Если не умеет, то возврат по значению производит лишнее копирование.
0
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
22.07.2011, 18:16  [ТС] #8
Я использую Visual Studio 2010.
0
22.07.2011, 18:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2011, 18:16
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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