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

Проблема с vector - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.74
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 17:49     Проблема с vector #1
Объявляю булевый вектор
C++
1
vector<bool> used;
затем заполняю его false'ами
C++
1
2
for (int i=0; i<n; i++)
        used[i] = false;
выходит ошибка при компиляции:

Debug Assertion Failed!
...\vector
Line: 1501

Expression: vector <bool> iterator not dereferencable

..............
и еще одна

Expression: ("Standart C++ Libraries Out of Range" 0)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.09.2011, 17:50     Проблема с vector #2
Если в массив ничего не добавляли, то обращение к несуществующим элементам.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 17:55     Проблема с vector #3
C++
1
2
3
vector<bool> used;
for (int i=0; i<n; i++)
                used.push_back(false);
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 18:05  [ТС]     Проблема с vector #4
Извините за глупый вопрос(это ж vector), давно просто уже парюсь сижу. Можете сразу напомнить какой функцией достать итый элемент? used.at(i)???
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 18:07     Проблема с vector #5
Цитата Сообщение от Den4ik Посмотреть сообщение
Извините за глупый вопрос(это ж vector), давно просто уже парюсь сижу. Можете сразу напомнить какой функцией достать итый элемент? used.at(i)???
Если этот элемент уже существует, то можно просто индексацией (а можно и at, различие в том, что at выбрасывает исключение в случае не валидного индекса).
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 18:26  [ТС]     Проблема с vector #6
Еще вопрос. Как итому элементу присвоить значение?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.09.2011, 18:42     Проблема с vector #7
Den4ik, так же, через индексацию или at.
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 18:59  [ТС]     Проблема с vector #8
Пробовал, но ошибка подобная выходит.
на строке
C++
1
used.at(v->index) = true;
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 19:10     Проблема с vector #9
Den4ik, скажите, если у вас массив из четырёх элементов, как присвоить значение сто девятому?
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 19:41     Проблема с vector #10
Den4ik,
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 <iostream>
#include <vector>
 
int main()
{
    std::vector<bool> v;
    const int n = 11;
    int i;
 
    for (i = 0; i < n; i++)
        v.push_back(false);
 
    v[2] = true;
    for (i = 0; i < n; i++)
        std::cout << v[i] << ' ';
    std::cout << std::endl;
 
    v.at(3) = true;
    for (i = 0; i < n; i++)
        std::cout << v.at(i) << ' ';
    std::cout << std::endl;
 
    return 0;
}
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 19:55  [ТС]     Проблема с vector #11
talis,
v->index не может быть больше n.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 19:57     Проблема с vector #12
Den4ik, а вы сказали вектору, что в нём содержится n элементов?
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 20:00  [ТС]     Проблема с vector #13
talis,
v->index не может быть больше n.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
07.09.2011, 20:03     Проблема с vector #14
нельзя вектор из bool объявлять. лучше объявить как int
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 20:05     Проблема с vector #15
Den4ik, не надо мне два раза повторять. Если вы объявили вектор так:

C++
1
vector<bool> used;
То он не знает, что в нём должно быть место под n элементов. В нём места хватит на 0 (ноль) элементов, и как вы не пытайтесь, а элемент номер v->index вы в этот промежуток не втиснете. Смотрите:

C++
1
2
vector<bool> used;
cout << "Vector size = " << used.size() << '\n';
Цитата Сообщение от villu Посмотреть сообщение
нельзя вектор из bool объявлять. лучше объявить как int
villu, можно.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
07.09.2011, 20:16     Проблема с vector #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class bool_vector_t {
private:
   std::vector<bool> rep;
public:
   explicit bool_vector_t(const unsigned int size): rep(size) {}
   std::vector<bool>::reference operator[](const unsigned i) {
      return rep[i];
   }
};
....
    bool_vector_t bv(100);
 
    for(int i=0; i<100; i++) {
        bv[i] = (i % 2 == 0);
    }
 
    for(int i=0; i<100; i++) {
        cout << bv[i] << " ";
    }
так будет доступ
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 20:25     Проблема с vector #17
villu, а почему бы сразу не написать std::vector<bool> rep (100); без использования обёртки?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
07.09.2011, 20:29     Проблема с vector #18
да, уже почитал что это поправили. раньше (2004 год) vector<bool> вел себя не как вектор. Поэтому писался прокси-класс.
http://www.rsdn.ru/forum/cpp/2624630.flat.aspx как пример.
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
07.09.2011, 22:22  [ТС]     Проблема с vector #19
извиняюсь, инет тупил, два раза написал.

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
        vector<bool> used;
    vector<vector<Edge *>> m;
    vector<Vertex *> vertexes;
    vector<vector<Edge* >> edges;
    vector<Edge *> edgess;
    vector<Edge *> bridges;
    int timer;
    vector<int> tin, fup;
 
Bridge(ABCG<Vertex, Edge> *g)
    {
        m = g->matrix;
        timer = 0;
        Find_Bridge(g);
    };
 
    virtual void Find_Bridge (ABCG<Vertex, Edge> *g)
    {
        int n = g->v.size();
        for (int i=0; i<n; i++)
        used.push_back(false);
        for (int i=0; i<n; i++)
        {
            Vertex *ver = g->getVertex(i);
            if (!used.at(i))
                Dfs (g, ver, NULL);
        }
    };
 
    virtual void Dfs(ABCG<Vertex, Edge> *g, Vertex *v, Vertex *p)// = -1)
    {
        used.at(v->index) = true;
        timer++;
        tin.at(v->index) = fup.at(v->index) = timer;            
        for (size_t i=0; i<m.at(v->index).size(); ++i)  //      
            {
                if (m[v->index][i] == 0) continue;
                Vertex *To = m[v->index][i]->to;
                    if (To == p)  continue;     
                    if (used.at(To->index))
                        fup.at(v->index) = min (fup.at(v->index), tin.at(To->index));
                    else 
                    {
                        Dfs (g,To, v);
                        fup.at(v->index) = min (fup.at(v->index), fup.at(To->index));
                        if (fup.at(To->index) > tin.at(v->index))
                            IS_BRIDGE(v,To);
                    }
            }
    };
теперь вот ошибка с памятью, после строки где timer присваивается итым элементам массивов.
C++
1
tin.at(v->index) = fup.at(v->index) = timer;
Добавлено через 1 час 16 минут
вот такая:
Unhandled exception at 0x754a9617 in MyNewExcGraph.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0020f214..

в vector в строках:
C++
1
2
3
4
static void _Xran()
        {   // report an out_of_range error
        _THROW(out_of_range, "invalid vector<T> subscript"); // <==
        }
вообще не пойму что не так с вектором

Добавлено через 16 секунд
вот такая:
Unhandled exception at 0x754a9617 in MyNewExcGraph.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0020f214..

в vector в строках:
C++
1
2
3
4
static void _Xran()
        {   // report an out_of_range error
        _THROW(out_of_range, "invalid vector<T> subscript"); // <==
        }
вообще не пойму что не так с вектором

Добавлено через 1 минуту
при этом с булевским вектором сейчас все норм

Добавлено через 16 секунд
при этом с булевским вектором сейчас все норм

Добавлено через 19 минут
все, понял ошибку, о чем мне до этого рассказывали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2015, 18:16     Проблема с vector
Еще ссылки по теме:

C++ error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main
Как корректно скопировать vector в vector внутри класса C++
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) C++

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

Или воспользуйтесь поиском по форуму:
Krock21rus
73 / 73 / 19
Регистрация: 18.11.2013
Сообщений: 369
Завершенные тесты: 2
21.02.2015, 18:16     Проблема с vector #20
Цитата Сообщение от villu Посмотреть сообщение
нельзя вектор из bool объявлять. лучше объявить как int
согласен, в vector<bool> содержится проблема, где-то я читал что по идее должно выделятся по биту на элемент, но это не реализовано в vector, поэтому он выделяет и возвращает как на int из-за какой-то функции
Yandex
Объявления
21.02.2015, 18:16     Проблема с vector
Ответ Создать тему
Опции темы

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