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

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

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

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

21.02.2013, 16:35. Просмотров 329. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 16:35     Правильно ли выполнено задание
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
unit7
30 / 30 / 4
Регистрация: 07.08.2012
Сообщений: 86
21.02.2013, 16:50     Правильно ли выполнено задание #2
Да.
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.02.2013, 17:08     Правильно ли выполнено задание #3
Неплохо бы еще передавать вектор по ссылке.
DiffEreD
1429 / 766 / 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;
};
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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(); });
}
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
[]()
{
}
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
21.02.2013, 18:48     Правильно ли выполнено задание #7
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
ваш метод чутка медленный из-а использования for_each, желательно бы вынести v.end() и v.begin в переменные, ибо они инициируются каждый раз при выполнение цикла.
Это вы сами придумали?
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
также лямбды лучше показывать вот так
Вопрос вкуса. На мой взгляд, лямбды длиннее одной строки вообще не имеют смысла(имею в виду, если использовать их так, как это сделано у меня и у yuron_477), а следовательно и не требуют какого-то особого оформления.
Demy85
58 / 58 / 5
Регистрация: 28.05.2012
Сообщений: 211
Завершенные тесты: 1
21.02.2013, 19:06     Правильно ли выполнено задание #8
Предопределение функции должно содержать const в параметре.
KostyaKulakov
Заблокирован
21.02.2013, 19:23  [ТС]     Правильно ли выполнено задание #9
Цитата Сообщение от rangerx Посмотреть сообщение
Это вы сами придумали?

Вопрос вкуса. На мой взгляд, лямбды длиннее одной строки вообще не имеют смысла(имею в виду, если использовать их так, как это сделано у меня и у yuron_477), а следовательно и не требуют какого-то особого оформления.
нет. каждый раз цикл обращается к v.end и v.begin. те заново вызывает функцию, затрачивая больше времени, чем обращаясь к уже заранее инициализированной переменной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 20:00     Правильно ли выполнено задание
Еще ссылки по теме:

Можете сказать, я правильно понял задание? - 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) Найти максимальный элемент второй строки; с) Вычислить...

Дано действительное E>0. Найти первый член y[n], для которого выполнено y[n]-y[n-1]<E - C++
Здравствуйте! Нужно решить задачу на C++: Пусть, y=0 y=(y+1)/(y+2) k=1,2,... Дано действительное E&gt;0. Найти первый член y, для...

Программа правильно сохраняет, но не правильно считывает матрицу из файла - C++
Программа правильно сохраняет, но не правильно считывает матрицу из файла ... При считывание выводит на экран какие-то непонятные...


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

Или воспользуйтесь поиском по форуму:
DiffEreD
1429 / 766 / 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);
Yandex
Объявления
21.02.2013, 20:00     Правильно ли выполнено задание
Ответ Создать тему
Опции темы

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