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

палиндром - C++

Восстановить пароль Регистрация
 
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.09.2011, 19:37     палиндром #1
имеется 3 класса
1. проверяет является ли строка char* палиндромом
2. проверяет является ли vector<int> палиндромом
3. проверяет является ли число int палиндромом

Задача объединить их под крышей шаблона.
возникли вопросы
1. как определить размер такого объекта как вектор не используя size()? (т.е. определить размер внутри шаблона)
есть ли такой способ? от чего оттолкнуться проходя циклом по вектору? что будет его окончанием? не очень хочется передавать размер аргументом шаблона палиндрома.
C++
1
palindrom<vector<int>, 10> pal;
хочется
C++
1
palindrom<vector<int>> pal;
2. хорошо объединяется в данном случае, то что поддерживает [],
C++
1
if(val[forward]!=val[back]) return false;
а как быть с int? Есть ли способ (кроме специализации) загнать int под крышу такого шаблона?
поделитесь мыслями плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2011, 19:37     палиндром
Посмотрите здесь:

C++ Палиндром
Палиндром... C++
C++ Палиндром.
Палиндром C++
Палиндром с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
30.09.2011, 19:53     палиндром #2
Цитата Сообщение от AzaKendler Посмотреть сообщение
как определить размер такого объекта как вектор не используя size()?
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 <stdio.h>
#include <vector>
using std::vector;
 
template<typename T>
long sum(const T* first, const T* last) {
   long sum = 0;
   while(first != last) 
        sum += (long)*first++;
   return sum;
}
 
int main () {
   int arr[] = { 10, 20, 50, 70 };
   vector<int>  vec(arr, arr + sizeof(arr)/sizeof(arr[0]));
   
   char str[7] = "ABCDEF";
   printf("sum ascii : %d\n",  sum(str, str + strlen(str)) );
   printf("sum vint  : %d\n",  sum(vec.begin(),  vec.end()) );
   printf("sum array : %d\n",  sum(arr, arr + sizeof(arr)/sizeof(arr[0])));
 
   getchar();
   return 0;
}
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.09.2011, 21:08  [ТС]     палиндром #3
xAtom, кул, попробую приладить


ваще реал. спасибо за идею) это бьесценно.

C++
1
2
3
4
5
6
7
8
9
    template <typename Z> bool check(Z start, Z end)
    {
        size_t siz = 0;
        while(start!=end)
        {
            siz++;
            start++;
        }
}
C++
1
2
3
4
char* t = "momom";
    palindrom<char*> p2;
    p2.init(t);// да можно и в конструкторе
        bool bf = p2.check(t,t+strlen(t));
а по вопр №2 int есть мысли каки-нить у кого? (окромя специализации)
C++
1
int pal = 1234321
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
30.09.2011, 21:14     палиндром #4
врятли кроме специализации что-то выйдет
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.09.2011, 21:15  [ТС]     палиндром #5
OstapBender, ok.
Yandex
Объявления
30.09.2011, 21:15     палиндром
Ответ Создать тему
Опции темы

Текущее время: 01:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru