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

Странный глюк с вектором - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой http://www.cyberforum.ru/cpp-beginners/thread553864.html
Добрый вечер! Собственно суть задачи такова: Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой Я не совсем поняла...
C++ Очищение памяти в ассемблерной вставке /* Выделить из строки подстроку указанной длины, начиная с заданной позиции. */ #include <stdio.h> #include <iostream> #include <stdlib.h> void main () { setlocale (LC_ALL,... http://www.cyberforum.ru/cpp-beginners/thread553863.html
Не проходит компиляция программы. Ошибки из-за graphics.h C++
#include <graphics.h> #include <stdlib.h> #include <conio.h> int random (int k) { return rand() % k; } main() {
While/For C++
Здравствуйте. Нужна помощь в парочку задач: 1) Дано натуральные числа n,b1,b2,...,bn. Найти члены bk последовательности b1,b2,...,bn, имеют такое свойство: корни уравнения x^2+3*bk-5 действительны и...
C++ Таймер http://www.cyberforum.ru/cpp-beginners/thread553834.html
Господа знатоки,прошу помощи: Нужно реализовать таймер при запуске нужной функции: Класс class Game { protected: clock_t begin, end; int count, st, ft; public: void...
C++ Что является причиной ошибки после завершения всех операций? (динамический массив) Что является причиной ошибки после завершения всех операций? (динамический массив) #include <iostream> #include <conio.h> #include <ctime> #include <locale> using namespace std; void main(){... подробнее

Показать сообщение отдельно
Alex_oo7
50 / 61 / 4
Регистрация: 18.10.2010
Сообщений: 240

Странный глюк с вектором - C++

20.04.2012, 23:29. Просмотров 420. Ответов 9
Метки (Все метки)

Я определил операции:

Присвоения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool s;
std::vector<int> v;
void operator=(int get_i){      
        s = get_i < 0; // знак
        if(abs(get_i) >= 1000){
            v.resize(2);
            v[0] = abs(get_i % 1000);
            v[1] = abs(get_i / 1000);
        }else{
            v.resize(1);
            v[0] = abs(get_i); 
        }   
    }
Сравнения больше:
C++
1
2
3
4
5
6
7
8
9
10
11
bool operator >(big_integer& a, big_integer& b){
    if(a.s != b.s) { return b.s; }
    if(a.v.size() > b.v.size()) {return !a.s;}
    if(a.v.size() < b.v.size()) {return a.s;}
    for(int i = a.v.size(); i >= 0; i--){
        if(a.v[i] != b.v[i]){
            return (a.v[i] > b.v[i]) ^ a.s;
        }
    }
    return false;   
}
Проблема в том, что такой код возвращает 011, а должен 010

C++
1
2
3
4
5
6
7
8
9
10
11
big_integer a, b, c;    
    a = 100;
    b = 100;
    BOOST_CHECK(a > b);
    a = big_integer("100000000000000000000000000000000000000000000000000000");
    b = big_integer(                                                     "1");
    c = big_integer( "99999999999999999999999999999999999999999999999999999");  
    BOOST_CHECK(a - b == c);    
    a = 100;
    b = 100;
    BOOST_CHECK(a > b);
Операция минус выполняется верно и при дебаге она повлияла только на a.v.capacity()
Было 1 стало 18
Почему так может происходить ?
Неужели capacity как то влияет на результат ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru