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

Реализация алгоритма find_firdt_not_of через другие алгоритмы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ String to LPCSTR http://www.cyberforum.ru/cpp-beginners/thread337804.html
проблема такая (vc++ 2005) error C2664: 'CreateFileA' : cannot convert parameter 1 from 'System::String ^' to 'LPCSTR' поиск в гоогл непамог ... String^ str = comboBoxCOMNAME->Text; hCom =...
C++ Посоветуйте новичку в С++ Здравствуйте! После школьной программы знаком с основами Паскаля, Делфи. Скоро поступлю в ВУЗ. Скорей всего буду изучать там С++. Решил немного подготовиться. Скачал книгу Либерти (21 день). ... http://www.cyberforum.ru/cpp-beginners/thread337790.html
Преобразование строки в double C++
Собственно есть код: #include <iostream> #include <iomanip> using namespace std; double atof(const char *nPtr) {
Как сделать так, чтобы программа понимала русские буквы? C++
И если знаете как убрать этот огромный массив символов "char mass2" на chr виснет все... Так вот код программы. Мне нужно чтобы она выводила статистику по русским символам правильно... а то...
C++ Интернет и С++ http://www.cyberforum.ru/cpp-beginners/thread337748.html
Здраствуйте. Посоветуйте книги, статьи по сетевому программированию на С++, хочу понять саму систему, как там все должно быть устроено, т. е. что бы обьяснялся не сам инструментарий. Спасибо.
C++ Вывод информации о *.bmp на чистом C++ Собственно вот: #include <iostream> #include <fstream> #include <cmath> using namespace std; int main(int argc, char *argv) { char ch; подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
31.07.2011, 20:13  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
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
#include <iostream>
#include <algorithm>
 
template <class ForwardIter1, class ForwardIter2>
ForwardIter1 find_first_not_of(ForwardIter1 start1, ForwardIter1 stop1, ForwardIter2 start2, ForwardIter2 stop2){
    ForwardIter1 i;
    for ( i = start1; i != stop1; ++i )
        if ( std::find(start2, stop2, *i) == stop2 )
            break;
    return i;
}
 
int main(void){
    const int SIZE = 5;
    int arr1[SIZE] = { 1, 2, 3, 6, 5 };
    int arr2[SIZE] = { 1, 2, 3, 4, 5 };
    int * ptr;
    
    if ( ( ptr = (int*)find_first_not_of(arr1, arr1 + SIZE, arr2, arr2 + SIZE) ) == arr1 + SIZE )
        std::cout << "all elements from arr1 found in arr2" << std::endl;
    else 
        std::cout << "First element from arr1 that not found in arr2 is " << *ptr << std::endl;
    
    return 0;
}
Вот это то, что надо! Правда вы включили лишнее определение дополнительного итератора 'i', который совершенно не требуется. То есть можно было написать проще

C++
1
2
    for ( ; start1 != stop1; ++start1 )
        if ( std::find(start2, stop2, *start1) == stop2 )
Но здесь есть один существенный нюанс. В исходной постановке задачи предполагается, что происходит сравнение

*start1 == *it2 ( где it2 - это некоторый итератор из диапазона [start2, stop2). В вашем же алгоритме происходит перестановка операндов сравнения, то есть вы сравниваете

*it2 == *start1

Дело в том, что если у меня, допустим, определен такой класс, как

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Int
{
public:
   Int() : x( 0 ) {}
   explicit Int( int i ) : x( i ) {}
   bool operator ==( int i ) const
   {
      return ( x == i );
   }
private:
   int x;
};
то ваш алгоритм работать не будет!

То есть я имею в виду, что сравнение Int == int определено, а сравнение int == Int не определено.

Добавлено через 4 минуты
Цитата Сообщение от LosAngeles Посмотреть сообщение
я проверял на веторе, думаю не надо показывать, что исправить чтобы работало для других контейнеров?
а насчёт второго я хз, но результат она выдаёт правильный
Векторы, как и массивы, имеют итераторы произвольного доступа. Но если вы, например, имеете дело с односвязным списком, то код не будет компилироваться, так как у односвязных списков лишь последовательный итератор.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru