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

Бинарный поиск - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как разделить программу ну файлы http://www.cyberforum.ru/cpp-beginners/thread850634.html
Можете объяснить на любом простеньком примере)
C++ Книги с примерами алгоритмов Здравствуйте. Например, есть книга Стивенс Р. "Delphi. Готовые алгоритмы". А есть ли подобная литература по C++? Т.е. просто сборники алгоритмов, изложенных на C++ c объясненими принципов работы, причем желательно не тяжеловесные талмуды. http://www.cyberforum.ru/cpp-beginners/thread850633.html
Номер строки, в которой находится самое минимальное количество одинаковых элементов C++
Помогите Написать программу работы с двумерным целочисленным массивом из 5 строк и 7 столбцов для решения задачи: найти номер строки, в которой находится самое минимальное количество одинаковых элементов. пытался так сделать но не работает #include <iostream> #include <cstdlib> #include <ctime>
C++ максимальный из элементов встречающийся в матрице более 1 раза
с комментариями пожалуйста)))) вот половина программы доработайте пожалуйста.. #include "stdafx.h" // подключение файла перекомпилированного заголовка #include "iostream" // подключение библиотеки ввод/вывод #include "math.h" // подключение библиотеки тригонометрических функций using namespace std; void main(void) // головная программа { setlocale (0, "Rus"); // русский язык
C++ Перегрузка оператора ввода вывода http://www.cyberforum.ru/cpp-beginners/thread850615.html
Есть два хэдера(header.h и Array.h) и исполняемая программа main.cpp в которой я как раз и обращаюсь к оператору ввода Array.h #pragma once #include <iostream> #include "header.h" class Array: public Container{ private: char* data;
C++ Эти треугольники являются подобными числа a и b выражают длинны катетов одного прямоугольного треугольника,с и d - другого. Эти треугольники являются подобными. помогите в этих программах я 0 подробнее

Показать сообщение отдельно
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
29.04.2013, 00:41     Бинарный поиск
Если это строки, можно так.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <cstring>
#include <iostream>
#include <fstream>
 
template <class ForwardIterator, class T, class Compare>
ForwardIterator lowerBound (ForwardIterator first, ForwardIterator last,
  const T& value, Compare compare) {
  size_t count = last - first;
  while (count > 0) {
    ForwardIterator it = first;
    size_t step = count / 2;
    it += step;
    if (compare(*it, value)) {
      first = ++it;
      count -= step + 1;
    } else {
      count = step;
    }
  }
  return first;
}
 
class SortedStrings {
 public:
  typedef char **Iterator;
  typedef char *const *ConstIterator;
  SortedStrings() : capacity(10), size(0), strings(new char*[capacity]) {}
  virtual ~SortedStrings() {
    clear();
    delete [] strings;
  }
  void clear() {
    for (size_t i = 0; i < size; ++i) {
      delete [] strings[i];
    }
    size = 0;
  }
  size_t getSize() const { return size; }
  ConstIterator insert(const char *string) {
    checkCapacity(1);
    Iterator position = lowerBound(strings, strings + size, string,
      lesserString);
    for (Iterator i = strings + size; i > position; --i) {
      *i = *(i - 1);
    }
    *position = strcpy(new char[strlen(string) + 1], string);
    ++size;
    return position;
  }
  void remove(ConstIterator position) {
    size_t offset = position - strings;
    delete [] strings[offset];
    for (Iterator i = strings + offset; i < end(); ++i) {
      *i = *(i + 1);
    }
    --size;
  }
  ConstIterator begin() { return strings; }
  ConstIterator end() { return strings + size; }
  bool contains(const char *string) {
    Iterator position = lowerBound(strings, strings + size, string,
      lesserString);
    return position != end() && !lesserString(string, *position);
  }
 private:
  static bool lesserString(const char *a, const char *b) {
    return strcmp(a, b) < 0;
  }
  void checkCapacity(int increment) {
    if (capacity < capacity + increment) {
      capacity += increment;
      char **newData = new char*[capacity];
      for (size_t i = 0; i < size; ++i) {
        newData[i] = strings[i];
      }
      delete [] strings;
      strings = newData;
    }
  }
  size_t capacity;
  size_t size;
  char **strings;
};
 
int main(int argc, char *argv[]) {
  SortedStrings s;
  
  std::ifstream input("names.txt");
 
  while (!input.eof()) {
    char buffer[1024];
    input.getline(buffer, sizeof(buffer) - 1);
    if (!input.eof()) {
      s.insert(buffer);
    }
  }
  
  for (SortedStrings::ConstIterator i = s.begin(); i != s.end(); ++i) {
    std::cout << *i << std::endl;
  }
 
  char searchable[] = "Anna Annovna";
  std::cout << "Sorted string list " <<
    (s.contains(searchable) ? "contains '" : "does not contain '") <<
    searchable << "'" << std::endl;
 
  return 0;
}
 
Текущее время: 01:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru