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

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

Восстановить пароль Регистрация
 
Alex_oo7
 Аватар для Alex_oo7
48 / 59 / 4
Регистрация: 18.10.2010
Сообщений: 240
20.04.2012, 23:29     Странный глюк с вектором #1
Я определил операции:

Присвоения:
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 как то влияет на результат ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 23:29     Странный глюк с вектором
Посмотрите здесь:

C++ Работа с вектором
Работа с вектором C++
C++ странный "глюк"
Довольно странный и смешной глюк. (и очень непонятный.) C++
Странный глюк с биндом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6896 / 5136 / 251
Регистрация: 10.12.2010
Сообщений: 22,568
Записей в блоге: 17
21.04.2012, 02:26     Странный глюк с вектором #2
Абсолютно не понимаю..
Что это за объявление
C++
1
void operator=(int get_i){
Где оно находится? В классе? Тогда где описание класса?Покажите больше кода....
Alex_oo7
 Аватар для Alex_oo7
48 / 59 / 4
Регистрация: 18.10.2010
Сообщений: 240
21.04.2012, 16:47  [ТС]     Странный глюк с вектором #3
Avazart, не нужно больше кода, ошибка в этом
C++
1
for(int i = a.v.size(); i >= 0; i--){
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
21.04.2012, 16:56     Странный глюк с вектором #4
Цитата Сообщение от Alex_oo7 Посмотреть сообщение
Avazart, не нужно больше кода, ошибка в этом
C++
1
for(int i = a.v.size(); i >= 0; i--){
У меня одногрупница тоже всегда говорит, что другая часть кода не важна, кидая лишь кусок. В 10/10 случаев все было именно наоборот.

Здесь форум не экстрасенсов, в другом вашем куске кода может быть написано что угодно и это может играть роль.
Fred2011
-1 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 19
25.11.2014, 11:02     Странный глюк с вектором #5
Возможно, я в состоянии ответить, но на уровне чайника.
У вектора какая-то аллергия на замену содержимого. Я лично для каждой ситуации с использованием вектора создаю новый вектор, например:

Считаю неправильным:
C++
1
2
vector <int> v;
for(int k=0; k<10; k++)v=function(a, b, c);
Рекомендую:
C++
1
2
3
4
5
for(int k=0; k<10; k++)
{
vector <int> v;
v=function(a, b, c);
}
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
25.11.2014, 11:06     Странный глюк с вектором #6
Fred2011, нужен код функции function().

Добавлено через 48 секунд
и пока непонятно для чего в цикле вызывается эта функция.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
25.11.2014, 11:09     Странный глюк с вектором #7
Цитата Сообщение от Fred2011 Посмотреть сообщение
vector <int> v;
for(int k=0; k<10; k++)v=function(a, b, c);
На такие записи и у меня аллергия. Кто ж Вас так учил делать?..
Прочитайте что такое вектор и как его заполнять. И нижнее "письмо" к этому тоже относится.

Добавлено через 36 секунд
Цитата Сообщение от Fred2011 Посмотреть сообщение
for(int k=0; k<10; k++)
{
vector <int> v;
v=function(a, b, c);
}
А тут сразу после фора Ваш вектор сгорит синим пламенем.
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
25.11.2014, 11:09     Странный глюк с вектором #8
Цитата Сообщение от Alex_oo7 Посмотреть сообщение
big_integer
а это что за тип? это дефайн, typedef, структура или класс?
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
25.11.2014, 11:27     Странный глюк с вектором #9
Цитата Сообщение от Fred2011 Посмотреть сообщение
Рекомендую:
C++
1
2
3
4
5
for(int k=0; k<10; k++)
{
vector <int> v;
v=function(a, b, c);
}

Просто ужас
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2014, 15:01     Странный глюк с вектором
Еще ссылки по теме:

Работа с вектором C++
C++ Глюк печатания и глюк порчи константы
Странный глюк цикла while C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
25.11.2014, 15:01     Странный глюк с вектором #10
Прошло 2.5 года...
Yandex
Объявления
25.11.2014, 15:01     Странный глюк с вектором
Ответ Создать тему
Опции темы

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