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

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

Войти
Регистрация
Восстановить пароль
 
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

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

24.08.2014, 22:51. Просмотров 474. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
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;
}
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
24.08.2014, 23:11     Не получается вставить элемент в вектор #3
gromo, так не подойдёт?
C++
1
vec.push_back({});
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.08.2014, 23:12  [ТС]     Не получается вставить элемент в вектор #4
Цитата Сообщение от Toshkarik Посмотреть сообщение
Потому, что value_type не является членом класса.
Почему не является? value_type по стандарту находится в public секции шаблона std::vector.
Да и компилятор ругается не на отсутствие члена класса, а на неправильное использование.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
24.08.2014, 23:13     Не получается вставить элемент в вектор #5
Цитата Сообщение от gromo Посмотреть сообщение
value_type по стандарту находится в public секции шаблона std::vector.
Но это не член-данные класса.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.08.2014, 23:17  [ТС]     Не получается вставить элемент в вектор #6
Цитата Сообщение от gray_fox Посмотреть сообщение
Но это не член-данные класса.
И все же, почему нельзя его использовать? Ведь к enum-члену класса можно обращаться. Все это "сущности" - типы, объекты, функции.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
24.08.2014, 23:21     Не получается вставить элемент в вектор #7
Цитата Сообщение от gromo Посмотреть сообщение
Почему не является?
Потому, что это typedef, а не объект или функция.

Добавлено через 35 секунд
Операция точка это операция доступа к члену класса, коим typedef не является.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
24.08.2014, 23:23     Не получается вставить элемент в вектор #8
Цитата Сообщение от gromo Посмотреть сообщение
И все же, почему нельзя его использовать? Ведь к enum-члену класса можно обращаться. Все это "сущности" - типы, объекты, функции.
Потому что таковы правила языка: к вложенным типам и статическим членам надо обращаться с помощью оператора :: .
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
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;
}
Voivoid
672 / 275 / 12
Регистрация: 31.03.2013
Сообщений: 1,336
24.08.2014, 23:28     Не получается вставить элемент в вектор #10
Можно вот так:
C++
1
decltype( vec )::value_type
gray_fox
24.08.2014, 23:30
  #11

Не по теме:

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

gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.08.2014, 23:30  [ТС]     Не получается вставить элемент в вектор #12
Цитата Сообщение от Voivoid Посмотреть сообщение
Можно вот так:
C++
1
decltype( vec )::value_type
интересно, но многовато писать. Я тут пытаюсь не переработаться
Voivoid
672 / 275 / 12
Регистрация: 31.03.2013
Сообщений: 1,336
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;
}
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.08.2014, 23:47  [ТС]     Не получается вставить элемент в вектор #14
Цитата Сообщение от Voivoid Посмотреть сообщение
Если вдруг кто не знал, то есть еще такая вот интересная конструкция
в принципе таким же мокаром передаются аргументы базовому классу в списке инициализации членов производного класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2014, 02:28     Не получается вставить элемент в вектор
Еще ссылки по теме:

Вставить после данного элемента списка новый элемент, и вывести указатель на добавленный элемент C++
Вектор: вставить новый элемент после последнего положительного C++
C++ Не получается умножить каждый элемент столбца на минимальный элемент этого столбца
C++ не получается заполнить вектор структур
Перед каждым положительным элемент массива вставить элемент с нулевым значением C++

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2014, 02:28     Не получается вставить элемент в вектор #15
Цитата Сообщение от Voivoid Посмотреть сообщение
Если вдруг кто не знал, то есть еще такая вот интересная конструкция:
это сделано для разруливания вызова при ромбовидном наследовании без применения виртуального наследования.
Yandex
Объявления
25.08.2014, 02:28     Не получается вставить элемент в вектор
Ответ Создать тему
Опции темы

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