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

С++ «Неделя вторая - Функции - Перемещение строк, разворот последовательности» #8

Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 1.

С++ «Неделя вторая - Функции - Перемещение строк, разворот последовательности» #8

Запись от acmades размещена 15.07.2017 в 12:40
Обновил(-а) acmades 15.07.2017 в 13:12 (Изменение категории)

Задание(перемещение строк):
Напишите функцию MoveStrings, которая принимает два вектора строк, source и destination, и дописывает все строки из первого вектора в конец второго. После выполнения функции вектор source должен оказаться пустым.
Моё решение:
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
#include "stdafx.h" //для Visual studio
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void MoveStrings(vector<string>& source, vector<string>& destination) { //передаем ссылки, чтобы изменить сами объекты
    int i = 0;
    for (auto x : source) {
        destination.push_back(x); // добавляем все строки из souse в destination
    }
    source.clear(); //очищаем
}
int main() //проверка работы
{
    vector<string> source = { "sdf","aaa","bbb" }, destination = { "xxx" };
    MoveStrings(source, destination); //выполняем запись и очистку
    for (auto i : source) {
        cout << i << " " << endl; //должно быть пусто
    }
    for (auto i : destination) {
        cout << i << " "; // должен быть дописанный вектор
    }
    return 0;
}
Еще одно задание(разворот последовательности):
Реализуйте функцию void Reverse(vector<int>& v), которая переставляет элементы вектора в обратном порядке.
Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void Reverse(vector<int>& v) {
    int size = v.size(); //определим размер вектора
    vector<int> c = v; //создам копию
    for (auto i : c) { // в копии пройдусь от начала до конца
        v[size - 1] = i; // и буду вставлять значения в вектор v с конца
        size--;
    }
}
int main() //проверим...
{
    vector<int> nambers = { 5,4,3,1,2 }; 
    Reverse(nambers); //изменили вектор
    for (auto i : nambers) { // проверим как изменился вектор 
        cout << i << " ";
    }
    return 0;
}
И ещё одно задание:
Реализуйте функцию vector<int> Reversed(const vector<int>& v), возвращающую копию вектора v, в которой числа переставлены в обратном порядке.

Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
vector<int> Reversed(const vector<int>& v) {
    int size = v.size();
    vector<int> c = v;
    for (auto i : v) { //тут, в отличие от предыдущего примера, смотрим входящий вектор и ...
        c[size - 1] = i; //записываем с конца вектора-копии
        size--;
    }
    return c; //возвращаем "перевернутую" копию
}
int main() //проверяем
{
    vector<int> nambers = { 5,4,3,1,2 };
    for (auto i : Reversed(nambers)) {
        cout << i << " ";
    }
    return 0;
}
Вопросов нет, вроде все просто.
Всего комментариев 3

Комментарии

  1. Старый комментарий
    Доброго вам времени суток. У меня к вам вопрос. Зачем вам переменная i типа int в первом образце кода?
    C++
    1
    2
    3
    4
    5
    6
    
    void MoveStrings(vector<string>& source, vector<string>& destination) { //передаем ссылки, чтобы изменить сами объекты
    * * int i = 0;
    * * for (auto x : source) {
    * * * * destination.push_back(x); // добавляем все строки из souse в destination
    * * }
    * * source.clear(); //очищаем
    Запись от Albatrosso размещена 01.08.2017 в 13:07 Albatrosso вне форума
  2. Старый комментарий
    Цитата:
    Сообщение от Albatrosso Просмотреть комментарий
    Доброго вам времени суток. У меня к вам вопрос. Зачем вам переменная i типа int в первом образце кода?
    C++
    1
    2
    3
    4
    5
    6
    
    void MoveStrings(vector<string>& source, vector<string>& destination) { //передаем ссылки, чтобы изменить сами объекты
    * * int i = 0;
    * * for (auto x : source) {
    * * * * destination.push_back(x); // добавляем все строки из souse в destination
    * * }
    * * source.clear(); //очищаем
    Спасибо, верно подмечено. Это моя невнимательность. Не нужна она там. Запамятовал стереть.
    Запись от acmades размещена 01.08.2017 в 22:09 acmades вне форума
  3. Старый комментарий
    C++
    1
    2
    3
    4
    5
    
    void MoveStrings(vector<string>& source, vector<string>& destination){
        for (auto s: source)
            destination.push_back(s);
        source.clear();
    }
    Запись от flash_back размещена 04.10.2017 в 15:41 flash_back вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru