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

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

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

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

24.08.2014, 22:51. Просмотров 479. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2014, 22:51     Не получается вставить элемент в вектор
Посмотрите здесь:

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

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

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

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

не получается заполнить вектор структур - C++
Есть вектор структур class Console { public: struct MyStruct { int begin_M; int end_M; }; std::vector &lt;MyStruct&gt;...

Перед каждым положительным элемент массива вставить элемент с нулевым значением - C++
6)Дан массив размера N. Перед каждым положительным элемент массива вставить элемент с нулевым значением.

Вставить данные типа float в вектор - C++
Вставить данные типа float введенные с клавиатуры Если чётный номер - в конец, нечет, - в начало вектора. #include &lt;iostream&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
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
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
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++
Здравствуйте. Решения для своей проблемы на форуме не нашел, по этому пришлось создать тему. Есть класс: class CAnimate { private: ...

Не получается вставить sizeof - C++
Всем привет. Есть структура, и мне нужно вывести размер структуры. Он выводится &quot;sizeof&quot;. Подскажите, куда его нужно вставить, чтобы...

Не получается вставить символ - C++
здравствуйте. Программа у меня складывает 2 денежные суммы выраженные в фунтах, шиллингах и пенсах и выводит результат. Но перед вводимым и...

Вектор строк, вставить в начало каждой строки число - C++
В общем, имеется вектор строк, надо вставить в начало каждой строки число, в частности номер этой строки (1, 2, 3 и т.д.), пробовал вот...

Не получается вставить десятичное число - C++
Может тупая просьба но уже нет сил моих, не могу понять как и все. Ниже приведен код подскажите ошибку, или пример с похожими вычислениями....


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

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

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