Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
1

Не получается вставить элемент в вектор

24.08.2014, 22:51. Показов 694. Ответов 14
Метки нет (Все метки)

Почему нельзя таким образом вставить элемент в вектор?
C++
1
2
3
4
5
6
7
8
9
#include <vector>
using SomeVeryLongNamedType = int;
int main() 
{
    std::vector<SomeVeryLongNamedType> vec;
    vec.emplace_back(vec.value_type()); // Так ведь меньше писать и более наглядно!
//    vec.emplace_back(std::vector<SomeVeryLongNamedType>::value_type());  // а так можно
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2014, 22:51
Ответы с готовыми решениями:

Вектор: вставить новый элемент после последнего положительного
Дан вектор из n элементов, которые считываются с клавиатуры, Вставить новый элемент после...

Вставить в вектор новый элемент перед элементом с заданным индексом
Здравствуйте. У меня следующая проблема: Мне в программе нужно в вектор вставить в определенное...

Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на3,вставить....
Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками,...

Вставить значения в вектор
Пытаюсь вставить значения в вектор, но при запуске программы получаю ошибку сегментирования, ошибка...

14
1174 / 887 / 94
Регистрация: 03.08.2011
Сообщений: 2,457
24.08.2014, 23:08 2
Потому, что value_type не является членом класса. Что мешает typedef использовать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
 
using SomeVeryLongNamedType = int;
 
typedef std::vector< int > Vec;
 
typedef Vec::value_type ValueType;
 
int main() 
{
    Vec vec;
 
    vec.emplace_back( ValueType() );
 
    return 0;
}
0
What a waste!
1606 / 1298 / 180
Регистрация: 21.04.2012
Сообщений: 2,724
24.08.2014, 23:11 3
gromo, так не подойдёт?
C++
1
vec.push_back({});
1
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
24.08.2014, 23:12  [ТС] 4
Цитата Сообщение от Toshkarik Посмотреть сообщение
Потому, что value_type не является членом класса.
Почему не является? value_type по стандарту находится в public секции шаблона std::vector.
Да и компилятор ругается не на отсутствие члена класса, а на неправильное использование.
0
What a waste!
1606 / 1298 / 180
Регистрация: 21.04.2012
Сообщений: 2,724
24.08.2014, 23:13 5
Цитата Сообщение от gromo Посмотреть сообщение
value_type по стандарту находится в public секции шаблона std::vector.
Но это не член-данные класса.
0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
24.08.2014, 23:17  [ТС] 6
Цитата Сообщение от gray_fox Посмотреть сообщение
Но это не член-данные класса.
И все же, почему нельзя его использовать? Ведь к enum-члену класса можно обращаться. Все это "сущности" - типы, объекты, функции.
0
1174 / 887 / 94
Регистрация: 03.08.2011
Сообщений: 2,457
24.08.2014, 23:21 7
Цитата Сообщение от gromo Посмотреть сообщение
Почему не является?
Потому, что это typedef, а не объект или функция.

Добавлено через 35 секунд
Операция точка это операция доступа к члену класса, коим typedef не является.
0
What a waste!
1606 / 1298 / 180
Регистрация: 21.04.2012
Сообщений: 2,724
24.08.2014, 23:23 8
Цитата Сообщение от gromo Посмотреть сообщение
И все же, почему нельзя его использовать? Ведь к enum-члену класса можно обращаться. Все это "сущности" - типы, объекты, функции.
Потому что таковы правила языка: к вложенным типам и статическим членам надо обращаться с помощью оператора :: .
0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
24.08.2014, 23:27  [ТС] 9
Цитата Сообщение от gray_fox Посмотреть сообщение
Потому что таковы правила языка: к вложенным типам и статическим членам надо обращаться с помощью оператора :: .
Хорошо, enum ведь является типом? Всегда вроде бы являлся. И такой код работает:
C++
1
2
3
4
5
6
7
8
9
struct A {
    enum class Enum { First, Last };
};
 
int main() {
    A a;
    std::cout << (int)a.Enum::First;
    return 0;
}
1
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
24.08.2014, 23:28 10
Можно вот так:
C++
1
decltype( vec )::value_type
0
gray_fox
24.08.2014, 23:30
  #11

Не по теме:

Цитата Сообщение от gromo Посмотреть сообщение
И такой код работает
Не знал.

0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
24.08.2014, 23:30  [ТС] 12
Цитата Сообщение от Voivoid Посмотреть сообщение
Можно вот так:
C++
1
decltype( vec )::value_type
интересно, но многовато писать. Я тут пытаюсь не переработаться
0
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
24.08.2014, 23:37 13
Цитата Сообщение от gromo Посмотреть сообщение
интересно, но многовато писать. Я тут пытаюсь не переработаться
Увы, но C++ не отличается лаконичностью. Хочется поменьше писать - бери haskell

Добавлено через 4 минуты
Если вдруг кто не знал, то есть еще такая вот интересная конструкция:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct foo {
  virtual void f() {
  }
};
 
struct bar : foo {
  void f() {
  }
};
 
int main() {
 
  bar b;
  b.foo::f(); // как можно догадаться, вызов foo::f
 
  return 0;
}
1
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
24.08.2014, 23:47  [ТС] 14
Цитата Сообщение от Voivoid Посмотреть сообщение
Если вдруг кто не знал, то есть еще такая вот интересная конструкция
в принципе таким же мокаром передаются аргументы базовому классу в списке инициализации членов производного класса.
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.08.2014, 02:28 15
Цитата Сообщение от Voivoid Посмотреть сообщение
Если вдруг кто не знал, то есть еще такая вот интересная конструкция:
это сделано для разруливания вызова при ромбовидном наследовании без применения виртуального наследования.
0
25.08.2014, 02:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2014, 02:28

Не получается заполнять вектор X и Y
Не получается заполнять вектор X и Y #include &lt;SDL.h&gt; #include &lt;string&gt; #include &lt;iostream&gt;...

Дана матрица A и вектор B порядка N. Поулчить вектор С, i-ый элемент которого..
Уважаемые форумчане) Помогите написать пожалуйста =) Дана матрица A и вектор B порядка N....

Сформировать вектор В, каждый элемент которого равен скалярному произведению строки матрицы A [M × N] на вектор Х
Условие:Сформировать вектор В, каждый элемент которого равен скалярному произведению строки матрицы...

Получить в результате умножения исходной матрицы А(6,7) на вектор-столбец В(7) вектор С(6), каждый элемент которого вычисляется по формуле
Помогите сделать еще одну прогу!!! - Дана действительная матрица А(6,7) и вектор-столбец В(7)....


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

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

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