0 / 0 / 1
Регистрация: 05.03.2014
Сообщений: 94
1

Пробежать все элементы контейнера

12.01.2016, 20:44. Показов 2498. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень странная ошибка возникает в цикле:
C++
1
for (std::vector<int>::iterator it = Z.begin() ; it != Z.end(); ++it)
43 54 main.cpp [Error] no match for 'operator!=' (operand types are 'std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >}' and 'std::vector<MyStruct>::iterator {aka __gnu_cxx::__normal_iterator<MyStruct*, std::vector<MyStruct> >}')

Z - здесь вектор массива структур.

Если взять какой-нибудь стандартный пример, например - http://www.cplusplus.com/refer... tor/begin/ то все работает. Непонятно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2016, 20:44
Ответы с готовыми решениями:

Как лучше всего пробежать все элементы контейнера?
Речь о следующем. Есть vector. Я хочу пробежать все его элементы, но походу я буду проверять...

Путешествие коня. Почему конь не хочет пробежать все возможные варианты?
Всем привет. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int _tmain(int...

Удалить элементы из контейнера map
#include &lt;iostream&gt; #include &lt;map&gt; using namespace std; int main() { map&lt;int, int&gt; map1; ...

Из каждого элемента контейнера map вычесть среднее арифметическое контейнера
Контейнер map, тип элементов Int 3.Из каждого элемента вычесть среднее арифметическое контейнера

10
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
12.01.2016, 20:47 2
Лучший ответ Сообщение было отмечено FortranDLL как решение

Решение

По ошибкам компиляции видно, что тип, на который ссылается итератор, не тот.
Цитата Сообщение от FortranDLL Посмотреть сообщение
C++
1
std::vector<int>::iterator
Вероятно так
C++
1
std::vector<MyStruct>::iterator
2
0 / 0 / 1
Регистрация: 05.03.2014
Сообщений: 94
12.01.2016, 20:48  [ТС] 3
Вот блин. Спасибо!
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
12.01.2016, 20:49 4
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

используйте range-for из C++11 и не мучайтесь.
2
0 / 0 / 1
Регистрация: 05.03.2014
Сообщений: 94
12.01.2016, 20:56  [ТС] 5
Тогда еще сразу вопрос. Пусть вот такой массив структур:
C++
1
2
3
4
5
struct MyStruct
{
  int A;
  int B;
};
Как теперь из вектора Z выцепить A соответствующую данному итератору?
По логике что-то в духе
C++
1
*Z.A
Но не работает
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
12.01.2016, 21:02 6
FortranDLL,
Цитата Сообщение от FortranDLL Посмотреть сообщение
C++
1
*Z.A
Сначала "применяется" оператор доступа к члену класса, потом оператор разыменования; стоит знать приоритет операторов.
C++
1
(*Z).A
Либо так:
C++
1
Z->A
1
0 / 0 / 1
Регистрация: 05.03.2014
Сообщений: 94
12.01.2016, 21:11  [ТС] 7
Ни один из вариантов не работает. Не понимаю:
47 37 main.cpp [Error] no match for 'operator*' (operand type is 'std::vector<MyStruct>')
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
12.01.2016, 21:15 8
FortranDLL, т.е. Z - это вектор? Тогда
C++
1
Z[index].A
1
0 / 0 / 1
Регистрация: 05.03.2014
Сообщений: 94
12.01.2016, 21:39  [ТС] 9
Тогда итератор не нужен.

Добавлено через 23 минуты
Может ли эта проблема быть из-за версии C++?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
12.01.2016, 21:49 10
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

FortranDLL, В чём проблема использовать диапазонный цикл for?
C++
1
2
3
for( const auto& elem : Z ) {
    cout << elem << ' '; // к примеру
}
1
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
13.01.2016, 00:33 11
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
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
 
struct MyStruct;
typedef std::vector <MyStruct> Structure;
 
struct MyStruct
{
    int a;
    int b;
};
 
int main()
{
    srand(time(NULL));
 
    const size_t N = 10;
    Structure v(N);
 
    for (size_t i = 0 ; i < N; ++i)
    {
        v[i].a = rand() % 100;
        v[i].b = rand() % 200;
        std::cout << v[i].a << ' ' << v[i].b << std::endl;
    }
 
    std::cout << std::endl;
 
    for (Structure::iterator iter = v.begin() ; iter != v.end() ; ++iter)
    {
        std::cout << iter->a << ' ' << iter->b << std::endl;
    }
 
    return 0;
}
0
13.01.2016, 00:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2016, 00:33
Помогаю со студенческими работами здесь

Найти минимальный и максимальный элементы контейнера и поменять их местами.
вот собственно и задача Найти минимальный и максимальный элементы контейнера и поменять их местами.

MDI Forms: все элементы контейнера (владельца) перекрывают дочернюю форму
при создании в MDI контейнере дочерних форм, все элементы контейнера(владельца), перекрывают...

Пробежать по первой таблице собрать все его virtuemart_media_id и вывести только их из второй таблицы
имеетбться две таблицы 1) _virtuemart_manufactures_medias - имеет поля id и...

Окрасить все положительные элементы матрицы в красный цвет, все отрицательные в зеленый, а все нулевые элементы в белый.
ПОМОГИТЕ ПОЖАЛУЙСТА!на паскаль абс 1) Целочисленная матрица n-го порядка создается из случайных...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru