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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.89
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
#1

Обращение к определенному элементу списка. - C++

11.05.2010, 16:05. Просмотров 5227. Ответов 23
Метки нет (Все метки)

Сабж.
К примеру, имеется список:
C++
1
list <int> L;
И есть цикл:
C++
1
2
3
list <int>::iterator i;
    for (i=L.begin() ; i!=L.end() ; i++) {
        // и вот тут, как мне обратится к i-ому элементу списка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2010, 16:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к определенному элементу списка. (C++):

Что быстрее? Обращение к элементу массива или к элементу структуры? - C++
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на...

Обращение к элементу массива - C++
Объясните пожалуйста, что происходит в строке помеченной *** void main(){ char str; char ptr; cin &gt;&gt; str; cout &lt;&lt; ...

Обращение к элементу матрицы - C++
как зделать операцию A template &lt;class T&gt; class matrix{ T **mat; int n, m; public: matrix(int a, int b); void...

Обращение к элементу массива - C++
Как мне обратиться к последнему элементу массива? например: Array // i = 0 тут нужно что бы -1 был последним т.е N-1 //можно ли с...

Списки. К каждому элементу списка прибавить значение следующего элемента списка. Последний элемент не менять - C++
Данные списка должен ввести пользователь. Результат нужно сформировать в начальном списке, никаких новых списков создавать нельзя. Спасибо!

Разработать класс Итератор, методы которого: переход в начало списка, в конец, к текущему элементу списка, к с - C++
Разработать класс Итератор, методы которого: переход в начало списка, в конец, к текущему элементу списка, к следующему элементу, к...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
18.05.2010, 17:13  [ТС] #16
Не хотел создавать новую тему, напишу тут.

В каком направлении мне идти, если моя задача научится делать элементарные программы, но с пользовательским интерфейсом? К примеру, те же крестики-нолики, но с возможностью нажать "New game", "Exit". Это всего лишь пример, и мб неудачный. Но я надеюсь что вы меня поняли

Добавлено через 2 минуты
И конечно буду сильно благодарен за хорошую литературу.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
18.05.2010, 17:47 #17
Цитата Сообщение от neske Посмотреть сообщение
В каком направлении мне идти, если моя задача научится делать элементарные программы, но с пользовательским интерфейсом?
Я бы Qt посоветовал. Сам освоить пытаюсь, правда, не легко пока даётся. И с книжками засада. Единственная бумажная, которую нашёл (ну люблю я бумажные книжки) - Ю. Земсков "Qt 4 на примерах". Не очень хорошая книжка - сумбурно всё как-то, и многие примеры мягко говоря сомнительно написаны. За то в самом Qt помощь не плохо сделана - при желании можно разобраться...
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
19.05.2010, 15:06  [ТС] #18
Спасибо.
А что на счет литературы из этой темы, может быть кто-нибудь пользовался? (в конце)
http://www.cyberforum.ru/cpp-cross-p...read79698.html
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
07.06.2010, 17:58  [ТС] #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
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
 
int rnd ()
{
    return rand()%101-50;
}
 
bool neg_el (int x)
{
    return (x<0);
}
 
int main()
{
    // initial
    const int size=20;
    std::vector <int> vec (size);
    // fill
    srand (time(NULL));
    std::generate_n (vec.begin(), vec.size(), rnd);
    // output start matrix
    std::cout << "Start matrix:\n";
    std::copy (vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
    // output negative elements
    std::vector <int> :: iterator it;
    std::cout << "Negative elements: ";
    while ( (it=std::find_if (vec.begin(), vec.end(), neg_el) ) != vec.end())
        std::cout << *it << " ";
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
Добавлено через 26 секунд
Программа зацикливается.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
07.06.2010, 18:10 #20
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
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib> /* вот этого не хватало */
 
int rnd ()
{
    return rand()%101-50;
}
 
bool neg_el (int x)
{
    return (x<0);
}
 
int main()
{
    // initial
    const int size=20;
    std::vector <int> vec (size);
    // fill
    srand (time(NULL));
    std::generate_n (vec.begin(), vec.size(), rnd);
    // output start matrix
    std::cout << "Start matrix:\n";
    std::copy (vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
    // output negative elements
    std::vector <int> :: iterator it;
    std::cout << "Negative elements: ";
    /*
    а тут зацикливалось
    while ( (it=std::find_if (vec.begin(), vec.end(), neg_el) ) != vec.end())
    */
    for ( it = std::find_if(vec.begin(), vec.end(), neg_el); it != vec.end(); it = std::find_if(++it, vec.end(), neg_el) )
        std::cout << *it << " ";
    std::cout << std::endl;
 
    // system ("pause");
    return 0;
}
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
07.06.2010, 18:15  [ТС] #21
easybudda, да, я понял, спасибо.
А как же тогда твой пост:
C++
1
2
3
4
5
6
...
std::list<int> L;
...
std::list<int>::iterator i;
while ( ( i = std::find_if(L.begin(), L.end(), isOdd) ) != L.end() )
  L.erase(i);
Эта же тема, #5.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
07.06.2010, 18:19 #22
neske, так тут-то найденный элемент удалается и при следующем проходе другой находится. А если его просто печатать, то всё время первый отрицательный и будет находиться...
neske
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
07.06.2010, 18:21  [ТС] #23
Господи, конечно же!)
Спасибо (;
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
07.06.2010, 18:22 #24
а вообще проще надо быть
C++
1
2
3
4
...
for ( it = vec.begin(); it != vec.end(); ++it )
  if ( neg_el(*it) )
    std::cout << *it << ' ';
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2010, 18:22
Привет! Вот еще темы с ответами:

STL обращение к элементу list - C++
Помогите исправить ошибку. #include &lt;list&gt; #include &lt;iostream&gt; using namespace std; class PeopleB{ public: int xxx; }; ...

STL . Обращение к 12 элементу вектора - C++
Добрый вечер, форумчане! Столкнулся вот с такой проблемой. Имеется вектор, заполненный числами, огромной длины. Но почему-то не хочет...

Обращение к следующему элементу в for-each цикле - C++
Как обратиться к следующему элементу for each цикла? Например, в цикле for (auto &amp;el : text_vector) { if (el &gt; следующий...

STL обращение к элементу vector - C++
Помогите исправить ошибку. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class otschet { public: double...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.06.2010, 18:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru