Форум программистов, компьютерный форум, киберфорум
Наши страницы

Класс Vector - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двусвязный список http://www.cyberforum.ru/cpp-beginners/thread573234.html
начал изучать двусвязный список, так как надо сдать лабу по этой теме, но не очень хорошо понимаю его организацию, помогите пожалуйста, мне нужно доделать добавление и удаление элемента в любое место...
C++ [DLL] Проблема с функцией Здравствуйте, у меня проблема с вызовом функции ASM в DLL. Использую так, всё ок: DWORD id = 0x1F8; DWORD f = 0x0043A0B0; __asm push id __asm call f Если так, то выкидывает. http://www.cyberforum.ru/cpp-beginners/thread573217.html
OpenGL C++ вывод текста C++
Подскажите самый простой способ вывести текст в определенном месте.
C++ Найти все вхождения строки T в строке S!
Найти все вхождения строки T в строке S Входные данные В первой строке входного файла INPUT.TXT записана строка S, во второй строке записана строка T. Обе строки состоят только из...
C++ неориентированный граф http://www.cyberforum.ru/cpp-beginners/thread573184.html
Здравствуйте! Используя методы объектно-ориентированного программирования требуется реализовать абстрактную структуру данных (класс), называемую «граф»(G(V,E)) Для выполнения базовых операций над...
C++ Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. INPUT.TXT OUTPUT.TXT qwerty ---- ert dertfg ... подробнее

Показать сообщение отдельно
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.05.2012, 01:36
да там конструктор копирования кривой. тот, который по дефолту генерится. вот чистый вектор без дополнительных примочек (исключения, какие-то левые функции и т.п.), которые у вас присутствуют. их вы сами себе снова сможете вставить:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <cassert>
#include <utility>
#include <iostream>
 
using namespace std;
 
template <class T>
class Vector
{
  T* m_data;
  unsigned m_size;
 
 public:
  explicit Vector(unsigned size, const T& val = T())
    : m_data(0)
    , m_size(0)
  {
    assert(size != 0);
    m_size = size;
    m_data = new T[size];
    for (unsigned i = 0; i < size; ++i)
    {
      m_data[i] = val;
    }
  }
 
  Vector(const Vector& other)
    : m_data(0)
    , m_size(0)
  {
    Vector tmp(other.m_size);
    for (unsigned i = 0; i < other.m_size; ++i)
    {
      tmp.m_data[i] = other.m_data[i];
    }
    Swap(tmp);
  }
 
  Vector& operator = (const Vector& other)
  {
    if (this != &other)
    {
      Vector tmp(other);
      Swap(tmp);
    }
    return *this;
  }
 
  ~Vector()
  {
    delete[] m_data;
  }
 
  void Swap(Vector& other)
  {
    std::swap(m_data, other.m_data);
    std::swap(m_size, other.m_size);
  }
 
  unsigned Size() const
  {
    return m_size;
  }
 
  T& operator[] (unsigned index)
  {
    assert(m_size > index);
    return m_data[index];
  }
 
  const T& operator[] (unsigned index) const
  {
    assert(m_size > index);
    return m_data[index];
  }
 
  Vector& operator += (const Vector& other)
  {
    assert(m_size == other.m_size);
    for (unsigned i = 0; i < m_size; ++i)
      m_data[i] += other.m_data[i];
    return *this;
  }
};
 
template <class T>
Vector<T> operator + (const Vector<T>& lhs, const Vector<T>& rhs)
{
  Vector<T> result(lhs);
  result += rhs;
  return result;
}
 
template <class T>
ostream& operator << (ostream& out, const Vector<T>& vec)
{
  for (unsigned i = 0, end = vec.Size(); i != end; ++i)
  {
    out << vec[i] << ";";
  }
  return out;
}
 
int main()
{
  typedef Vector<int> IntVector;
 
  IntVector v1(5u, 2);
  cout << "Vector1: " << v1 << std::endl;
 
  IntVector v2 = v1;
  v2 += v1;
  cout << "Vector2: " << v2 << std::endl;
 
  v2 = v1;
  cout << "Vector2: " << v2 << std::endl;
 
  IntVector v3 = v1 + v2 + v1;
  cout << "Vector3: " << v3 << std::endl;
 
  return 0;
}
Есть косячок в плане безопасности исключений в конструкторе, но с этим вам жить можно
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru