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

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

Войти
Регистрация
Восстановить пароль
 
KostyaKulakov
Заблокирован
#1

Правильно ли выполнено задание - C++

21.02.2013, 16:35. Просмотров 334. Ответов 9
Метки нет (Все метки)

Написать функцию, которая принимает на вход вектор строк и выводит их суммарную
длину.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <vector>
#include <string>
 
size_t size_vector_string(std::vector<std::string> vector);
 
int main()
{
    std::vector<std::string> test;
 
    test.push_back("C++");
    test.push_back("The");
    test.push_back("Best");
    test.push_back(":)");
 
    std::cout << size_vector_string(test);
 
    return 0;
}
 
size_t size_vector_string(const std::vector<std::string> vector)
{
    const size_t size = vector.size();
 
    size_t string_symbol = 0;
 
    for(int i=0; i < size; ++i)
        string_symbol += vector.at(i).size();
 
    return string_symbol;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 16:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Правильно ли выполнено задание (C++):

Операторы цикла (задание должно быть выполнено всеми тремя типами циклов) - C++
Вычислить значение функции у=cosx+cosx²+…+cosx30... Операторы цикла (задание должно быть выполнено всеми тремя типами циклов)

Составить программу, которая выводит на экран слово «ИСТИНА», если условие выполнено или слово «ЛОЖЬ», если условие не выполнено. - C++
Цифры данного трехзначного числа V являются членами арифметической прогрессии

Правильно ли сделано задание - C++
Задание состоит в том что бы Определить является ли число k степенью 3. Не могли бы вы помочь объяснить в чем ошибка? # include...

Правильно ли сделано задание - C++
Нужно удалить максимальный элемент в массиве. Не могли бы вы помочь объяснить в чем ошибка? #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

правильно ли я сделал задание? - C++
правильно ли сделано задание? //предположим, что указатель pa был определен в следующем выражении с использованием оператора new. ...

правильно ли я выполнил задание? - C++
меня терзают жудкие сомнения насчёт правильности выполнения Исходный код программы на С++ обычно содержит много пар круглых, ...

9
unit7
30 / 30 / 4
Регистрация: 07.08.2012
Сообщений: 86
21.02.2013, 16:50 #2
Да.
1
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.02.2013, 17:08 #3
Неплохо бы еще передавать вектор по ссылке.
1
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.02.2013, 17:53 #4
В принципе, тоже самое, но я бы так написал:
C++
1
2
3
4
5
6
size_t size_vector_string(const std::vector<std::string>& v)
{
    size_t ret = 0;
    std::for_each(v.begin(), v.end(), [&ret](const std::string& s){ret += s.size();});
    return ret;
};
1
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
21.02.2013, 18:28 #5
C++
1
2
3
4
5
size_t size_vector_string(const std::vector<std::string>& v)
{
    return std::accumulate(v.begin(), v.end(), 0u,
                [](size_t sum, const std::string& str) { return sum + str.size(); });
}
1
KostyaKulakov
Заблокирован
21.02.2013, 18:31  [ТС] #6
Цитата Сообщение от yuron_477 Посмотреть сообщение
В принципе, тоже самое, но я бы так написал:
C++
1
2
3
4
5
6
size_t size_vector_string(const std::vector<std::string>& v)
{
    size_t ret = 0;
    std::for_each(v.begin(), v.end(), [&ret](const std::string& s){ret += s.size();});
    return ret;
};
ваш метод чутка медленный из-а использования for_each, желательно бы вынести v.end() и v.begin в переменные, ибо они инициируются каждый раз при выполнение цикла.

также лямбды лучше показывать вот так
C++
1
2
3
[]()
{
}
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
21.02.2013, 18:48 #7
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
ваш метод чутка медленный из-а использования for_each, желательно бы вынести v.end() и v.begin в переменные, ибо они инициируются каждый раз при выполнение цикла.
Это вы сами придумали?
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
также лямбды лучше показывать вот так
Вопрос вкуса. На мой взгляд, лямбды длиннее одной строки вообще не имеют смысла(имею в виду, если использовать их так, как это сделано у меня и у yuron_477), а следовательно и не требуют какого-то особого оформления.
0
Demy85
59 / 59 / 5
Регистрация: 28.05.2012
Сообщений: 220
Завершенные тесты: 1
21.02.2013, 19:06 #8
Предопределение функции должно содержать const в параметре.
1
KostyaKulakov
Заблокирован
21.02.2013, 19:23  [ТС] #9
Цитата Сообщение от rangerx Посмотреть сообщение
Это вы сами придумали?

Вопрос вкуса. На мой взгляд, лямбды длиннее одной строки вообще не имеют смысла(имею в виду, если использовать их так, как это сделано у меня и у yuron_477), а следовательно и не требуют какого-то особого оформления.
нет. каждый раз цикл обращается к v.end и v.begin. те заново вызывает функцию, затрачивая больше времени, чем обращаясь к уже заранее инициализированной переменной.
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.02.2013, 20:00 #10
KostyaKulakov, вот взгляните на реализацию for_each. Переменным first и last присваивается значения итераторов begin() и end() и дальше алгоритм работает только с first и last. Цикл каждый раз не обращается к v.end() и v.begin() и никакого замедления не происходит.
C++
1
2
3
4
5
6
7
8
template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
    for (; first != last; ++first) {
        f(*first);
    }
    return f;
}
Вот ели б вы так написали:
C++
1
for (auto it = test.begin(); it != test.end(); ++it);
, то да, здесь на каждой итерации цикла бы высчитывалось it != test.end() и тут лучше завести новую переменную и присвоить ей test.end() или так писать:
C++
1
for (std::vector<std::string>::iterator it = test.begin(), end = test.end(); it != end; ++it);
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 20:00
Привет! Вот еще темы с ответами:

Как правильно выполнить задание? - C++
В программу должно вводиться предложение. Если предложение заканчивается пробелом с точкой, пишем &quot;да&quot; , иначе пишем &quot;нет&quot; string...

Проверьте пожалуйста, правильно ли я сделал задание - C++
Вот задание Дано действительное х. Вычислить \frac{(x-1)(x-3)(x-7)K(x-63)}{(x-2)(x-4)(x-8)K(x-64)} { {...

Можете сказать, я правильно понял задание? - C++
Вычислить сумму чисел в каждой строке. N&lt;=10, M&lt;=10 #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; int...

Задание с матрицами! Не могу правильно настроить - C++
а)Двумерный массив размерностью 5 на 8 из целых элементов в диапазоне ; b) Найти максимальный элемент второй строки; с) Вычислить...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
21.02.2013, 20:00
Ответ Создать тему
Опции темы

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