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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
#1

Отобразить вектор в обратном порядке не используя реверсивные итераторы - C++

07.08.2012, 16:40. Просмотров 3500. Ответов 23
Метки нет (Все метки)

Отобразить вектор в обратном порядке не используя реверсивные итераторы

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

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

Используя рекурсию напечатать вводимые числа в обратном порядке - C++
1. Написать рекурсивную процедуру, которая считывает вводимые с клавиатуры числа до тех пор, пока не будет обнаружен нуль. Затем введенные...

Напечатать в обратном порядке заданный текст используя рекурсию - C++
Напечатать в обратном порядке заданный текст, используя рекурсию.

Используя стек ,переписать строку посимвольно в обратном порядке - C++
Используя стек ,переписать строку посимвольно в обратном порядке!!!!!!!!!!!

Используя стек, распечатать слова из текстового файла в обратном порядке - C++
помогите решить задачу. используя стек распечатать слова в текстовом файле в обратном порядке. заранее спасибо !!:(

Не используя других массивов, переставить элементы заданного массива в обратном порядке - C++
Дан массив целых чисел. Не используя других массивов, переставить элементы массива в обратном порядке. Заранее благодарю.

23
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.08.2012, 19:16 #16
Окей. У меня варианты исчерпались.

№ 1: в лоб.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
 
int main()
{
  std::vector<int> vec;
  vec.push_back(1);
  vec.push_back(2);
  vec.push_back(3);
  vec.push_back(4);
  vec.push_back(5);
 
  for (int i = vec.size() - 1; i >= 0; --i) {
    std::cout << vec[i] << " ";
  }
  return 0;
}
№ 2: для извращенцев.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
 
int main()
{
  std::vector<int> vec;
  vec.push_back(1);
  vec.push_back(2);
  vec.push_back(3);
  vec.push_back(4);
  vec.push_back(5);
 
  for (std::vector<int>::iterator last = vec.end(); last != vec.begin();) {
    std::vector<int>::iterator prev = vec.begin();
    for (std::vector<int>::iterator i = vec.begin(); i != last; ++i) {
      prev = i;
    }
    std::cout << *prev << " ";
    last = prev;
  }
  return 0;
}
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
07.08.2012, 19:24 #17
Для любого STL контейнера.
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
#include <iostream>
#include <vector>
#include <list>
#include <forward_list>
 
template<template<class...> class Container, class... Args>
std::ostream& operator << (std::ostream& os, const Container<Args...>& cont)
{
   auto start = std::begin(cont), end = std::end(cont);
   auto diff = std::distance(start, end);
   for (decltype(diff) i = diff - 1; i >= 0; --i)
   {
      auto it = start;
      std::advance(it, i);
      os << *it << " ";
   }
   os << std::endl;
   return os;
}
 
int main()
{
   std::vector<int> v = {1,2,3,4};
   std::cout << v << std::endl;
   std::list<int> l = {1,2,3,4};
   std::cout << l << std::endl;
   std::forward_list<int> f = {1,2,3,4};
   std::cout << f << std::endl;
}
http://liveworkspace.org/code/7bdb51397e337ff5393b88d68ff4fa4b

Добавлено через 5 минут
Ну или так. Через итераторы.
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
#include <iostream>
#include <vector>
#include <list>
#include <forward_list>
 
template<class Iterator>
std::ostream& print(std::ostream& os, Iterator start, Iterator end)
{
   auto diff = std::distance(start, end);
   for (decltype(diff) i = diff - 1; i >= 0; --i)
   {
      auto it = start;
      std::advance(it, i);
      os << *it << " ";
   }
   os << std::endl;
   return os;
}
 
int main()
{
   std::vector<int> v = {1,2,3,4};
   print(std::cout, std::begin(v), std::end(v));
   std::list<int> l = {1,2,3,4};
   print(std::cout, std::begin(l), std::end(l));
   std::forward_list<int> f = {1,2,3,4};
   print(std::cout, std::begin(f), std::end(f));
   int a[] = {1,2,3,4};
   print(std::cout, std::begin(a), std::end(a));
}
http://liveworkspace.org/code/009544ae501ab745af8966771e66db08
1
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
07.08.2012, 19:30  [ТС] #18
я решил следующим образом, интересует вариант вывода через цикл for , чтобы первый элемент не приходилось выводить отдельно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
 
int main() {            
 
    std::vector<int> v;    
        for(int i(1);i !=5;i++)
            v.push_back(i);
    
        std::vector<int>::iterator iter = v.end()-1;
 
        while(1) {
            if (iter != v.begin()) {
                std::cout << *iter << " " << std::flush;
                iter--;
            } else {
                std::cout << *iter << " " << std::endl;
                break;
            }
        }
 
        return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Для любого STL контейнера.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<template<class...> class Container, class... Args>
std::ostream& operator << (std::ostream& os, const Container<Args...>& cont)
{
   auto start = std::begin(cont), end = std::end(cont);
   auto diff = std::distance(start, end);
   for (decltype(diff) i = diff - 1; i >= 0; --i)
   {
      auto it = start;
      std::advance(it, i);
      os << *it << " ";
   }
   os << std::endl;
   return os;
}
такого я еще не знаю


Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
std::vector<int> v = {1,2,3,4};
по данным строкам мне выдает следующее:
v: инициализация не агрегированных данных с помощью списка инициализации не допускается
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
07.08.2012, 19:45 #19
DaskOFF, Не сомневаюсь, мне просто было удобнее так писать. Это новый стандарт. Видимо ваш компилятор его еще не полностью поддерживает.
0
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
07.08.2012, 19:47  [ТС] #20
Цитата Сообщение от ForEveR Посмотреть сообщение
DaskOFF, Не сомневаюсь, мне просто было удобнее так писать. Это новый стандарт. Видимо ваш компилятор его еще не полностью поддерживает.
у меня VS 2010
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
07.08.2012, 19:48 #21
DaskOFF, Списки инициализации она действительно не поддерживает, а вот все остальное, что написано в коде вроде как да.
1
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
08.08.2012, 08:45 #22
Цитата Сообщение от DaskOFF Посмотреть сообщение
работает, только auto не было в той теме
auto всего лишь позволяет не указывать тип при инициализации переменной, и используется исключительно для удобства. Т.е. вариант с использованием auto
C++
1
2
// неконстантный итератор
for(auto iter = v.end(); iter != v.begin(); )
C++
1
2
// константный итератор
for(auto iter = v.cend(); iter != v.cbegin(); )
с тем же успехом можно переписать и без него
C++
1
for(std::vector<int>::iterator iter = v.end(); iter != v.begin(); )
C++
1
for(std::vector<int>::const_iterator iter = v.end(); iter != v.begin(); )
1
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
08.08.2012, 11:29  [ТС] #23
Цитата Сообщение от rangerx Посмотреть сообщение
auto всего лишь позволяет не указывать тип при инициализации переменной, и используется исключительно для удобства. Т.е. вариант с использованием auto
C++
1
2
// неконстантный итератор
for(auto iter = v.end(); iter != v.begin(); )
C++
1
2
// константный итератор
for(auto iter = v.cend(); iter != v.cbegin(); )
с тем же успехом можно переписать и без него
C++
1
for(std::vector<int>::iterator iter = v.end(); iter != v.begin(); )
C++
1
for(std::vector<int>::const_iterator iter = v.end(); iter != v.begin(); )
ну в любом случае это не проходилось, значит предполагается другое решение, как я решил, интересует есть ли решение, где не надо выводить первый элемент отдельно
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
08.08.2012, 12:02 #24
Цитата Сообщение от DaskOFF Посмотреть сообщение
ну в любом случае это не проходилось
Повторюсь, использование auto не является принципиальным, тип итератора можно указать явно.
Цитата Сообщение от DaskOFF Посмотреть сообщение
интересует есть ли решение, где не надо выводить первый элемент отдельно
Да, решение находится в 12-ом посте. ))

Добавлено через 50 секунд
http://liveworkspace.org/code/0cf6f1293c1793104a79f0efdf754801
1
08.08.2012, 12:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 12:02
Привет! Вот еще темы с ответами:

Маcсив: Не используя других массивов, переставить его элементы в обратном порядке. - C++
Дан массив X целых чисел. Не используя других массивов, переставить его элементы в обратном порядке.

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

Дан одномерный массив.Не используя других массивов переставить его элементы в обратном порядке. - C++
Дан одномерный массив.Не используя других массивов переставить его элементы в обратном порядке.

Дан одномерный массив. Не используя других массивов, переставить его элементы в обратном порядке - C++
Задача №2 &quot;Дан одномерный массив. Не используя других массивов, переставить его элементы в обратном порядке&quot; ____________ Надеюсь на...


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

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

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