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

Создать 2 указателя на вектор - C++

Восстановить пароль Регистрация
 
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
07.02.2014, 11:57     Создать 2 указателя на вектор #1
хотел создать 2 указателя на вектор, а не получается...
пишу:
C++
1
shared_ptr<vector<int>> ptr1 (new vector<int>(10))
подчеркивает vector<int> в самом начале со словами : "vector не является шаблоном". Как правильно его создать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 11:57     Создать 2 указателя на вектор
Посмотрите здесь:

C++ Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы C++
C++ как вызвать метод из указателя на вектор пользовательского типа
C++ Создать следующую программу: при наведении указателя мыши на кнопку ее координаты изменяются произвольным образом в пределах формы (кнопка убегает
C++ Создать вектор классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
07.02.2014, 12:02     Создать 2 указателя на вектор #2
Случаем не забыли пробел поставить?
C++
1
shared_ptr< vector<int> > ptr1 (new vector<int>(10));
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
07.02.2014, 12:09     Создать 2 указателя на вектор #3
Может глупость скажу, но std:: не нужно дописывать? Вы использовали using namespace std?
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
07.02.2014, 12:10  [ТС]     Создать 2 указателя на вектор #4
Цитата Сообщение от Ilot Посмотреть сообщение
не забыли пробел поставить?
так для этого работает без пробелов
C++
1
shared_ptr<int>
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
07.02.2014, 12:12     Создать 2 указателя на вектор #5
Цитата Сообщение от Тамика Посмотреть сообщение
но std:: не нужно дописывать? Вы использовали using namespace std?
а может это из boost?
Автору же плевать что есть и другие
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.02.2014, 12:12     Создать 2 указателя на вектор #6
Цитата Сообщение от Ilot Посмотреть сообщение
Случаем не забыли пробел поставить?
если есть std::shared_ptr, то это уже C++11 и проблема с отсутствием пробела между >> там решена.
Могу предположить отсутствие:
C++
1
#include <vector>
А вообще не помешает больше кода.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
07.02.2014, 12:12     Создать 2 указателя на вектор #7
Цитата Сообщение от mat_for_c Посмотреть сообщение
так для этого работает без пробелов
Суть в том, что два идущих подряд символа в шаблоне ">>" расцениваются компилятором как оператор побитового сдвига, а не как элементы синтаксиса шаблона.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
07.02.2014, 12:12  [ТС]     Создать 2 указателя на вектор #8
Тамика, респект!
писал так:
C++
1
std::shared_ptr<vector<...>>
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
07.02.2014, 12:13     Создать 2 указателя на вектор #9
Цитата Сообщение от Ilot Посмотреть сообщение
Суть в том, что два идущих подряд символа в шаблоне ">>" расцениваются компилятором как оператор побитового сдвига, а не как элементы синтаксиса шаблона.
в C++11 требование пробела убрано из Стандарта
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
07.02.2014, 12:13     Создать 2 указателя на вектор #10
Цитата Сообщение от Tulosba Посмотреть сообщение
А вообще не помешает больше кода.
А вот это точно!
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
07.02.2014, 13:18  [ТС]     Создать 2 указателя на вектор #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
#include <iostream>
#include <vector>
#include <memory>
 
void main()
{
   typedef std::shared_ptr<std::vector<int>> ptr_vector;
    
   ptr_vector ptr1 (new std::vector<int>);
   ptr_vector ptr2, ptr3;
 
   for (int i = 0; i < 10; ++i)
      ptr1->push_back(i);
 
   std::vector<ptr_vector> vec_ptrs;
 
   vec_ptrs.push_back(ptr1);
 
   ptr2 = ptr1;
   ptr2->push_back(10);
    
   ptr1.swap(ptr3);
    
   vec_ptrs.push_back(ptr2);
   vec_ptrs.push_back(ptr3);
 
   for (int i = 0; i < vec_ptrs.size(); ++i){
      std::cout << "ptr" << i+1 << ": ";
         for (int j = 0; j < vec_ptrs[i]->size(); ++j)
            std::cout << (*vec_ptrs[i])[j] << " ";
      std::cout << std::endl;
   }
}
а почему swap так интересно работает?

в ответе:
ptr1: 0 1 2 3 4 5 6 7 8 9 10
ptr2: 0 1 2 3 4 5 6 7 8 9 10
ptr3: 0 1 2 3 4 5 6 7 8 9 10
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.02.2014, 13:54     Создать 2 указателя на вектор #12
Цитата Сообщение от mat_for_c Посмотреть сообщение
а почему swap так интересно работает?
все ptr ссылаются на одни и те же данные. Поэтому как их не обменивай друг с другом, будет то же самое.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
07.02.2014, 18:22  [ТС]     Создать 2 указателя на вектор #13
Цитата Сообщение от Tulosba Посмотреть сообщение
все ptr ссылаются на одни и те же данные
а разве ptr3 не должен быть nullptr?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.02.2014, 18:30     Создать 2 указателя на вектор #14
Цитата Сообщение от mat_for_c Посмотреть сообщение
а разве ptr3 не должен быть nullptr?
Ну до swap он действительно пустой, а после - уже нет.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
07.02.2014, 18:33  [ТС]     Создать 2 указателя на вектор #15
http://www.cplusplus.com/reference/m...ared_ptr/swap/
тут swap нормально меняет значения, а тут только передает значение...

Добавлено через 17 секунд
http://www.cplusplus.com/reference/m...ared_ptr/swap/
тут swap нормально меняет значения, а тут только передает значение...

Добавлено через 2 минуты
тогда swap должен присвоить ptr1 нулевой указатель или я не прав?

Добавлено через 24 секунды
тогда swap должен присвоить ptr1 нулевой указатель или я не прав?
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,640
Записей в блоге: 17
07.02.2014, 21:25     Создать 2 указателя на вектор #16
Цитата Сообщение от mat_for_c Посмотреть сообщение
shared_ptr<vector<int>> ptr1 (new vector<int>(10))
А нафига так делать?
Вектор вроде как сам поддерживает умное копирование.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 23:34     Создать 2 указателя на вектор
Еще ссылки по теме:

C++ Уместно ли использование указателя на вектор
C++ Создать целочисленный массив из 25 элементов. Объявить 2 указателя
C++ Передача указателя на вектор в функцию

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.02.2014, 23:34     Создать 2 указателя на вектор #17
Цитата Сообщение от Avazart Посмотреть сообщение
Вектор вроде как сам поддерживает умное копирование.
std::vector это не QVector, implicit sharing в первом нет
Yandex
Объявления
07.02.2014, 23:34     Создать 2 указателя на вектор
Ответ Создать тему
Опции темы

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