Я пытаюсь реализовать свой вариант векторов(не обязательно правильный и тд. это я для лабы делаю).
И он работает как я хотел но только с типом string он почемуто не хочет работаь.
мой код#include <iostream>
#include <cassert>
#include "colors.h"
using namespace std;
template <class T>
class vector{
private:
int length;
T * arr, * temp;
void clon(bool a_to_t = true){
if (a_to_t)
for(int i = 0; i < length; i++)
temp[i] = arr[i];
else
for(int i = 0; i < length; i++)
arr[i] = temp[i];
}
void log(){
cout << "length :" << length << endl;
(arr != nullptr) ? cout << "arr[0]:" << arr[0] << endl : cout<<endl;
(temp != nullptr) ? cout << "temp[0]:" << arr[0] << endl : cout<<endl;
}
public:
vector(){
length = 0;
arr = nullptr;
temp = nullptr;
}
vector(int l){
length = l;
arr = new T[length];
temp = nullptr;
}
~vector(){
delete[] arr, temp;
}
void pushBack(T value){
length++;
if(arr == nullptr){
arr = new T[length];
arr[0] = value;
cout << 1 << endl;
log(); // 1
}
else{
cout << 2 << endl;
log(); // 2
temp = new T[length];
cout << 3 << endl;
log(); // 3
clon();
cout << 4 << endl;
log(); // 4
temp[length-1] = value;
clon(false);
cout << 5 << endl;
log(); // 5
delete[] temp;
temp = nullptr;
}
}
T& operator[](int i){
try{
if(i < 0)
throw 1;
if(i > length)
throw 2;
if(i == 0 && length == 0)
throw 3;
return arr[i];
}
catch(int a){
bool nullSize = false;
namespace c = colors;
switch(a){
case 1:
c::red("!Індекс не може бути меншим за 0");
cout<<endl;
break;
case 2:
c::red("!Індекс більший за довжину масиву (");
c::yellow(length);
c::red(")");
cout<<endl;
break;
case 3:
c::red("!У масиві нічого немає (");
cout<<endl;
nullSize = true;
break;
}
if(!nullSize){
c::green("Я тобі дам перший елемент масиву:) ");
c::yellow(arr[0]);
cout<<endl;
return arr[0];
}
else{
c::red("Я не знаю що тобі дати крім виходу з проги");
cout<<endl;
assert(!nullSize);
}
}
}
};
int main(){
system("chcp 65001");
vector <string> obj;
obj.pushBack("прикольно");
obj.pushBack("правда?");
obj.pushBack("правда?");
obj.pushBack("правда?");
cout << obj[0] << " " << obj[1] << endl;
return 0;
}
Функция log срабтывает только до коментария
// 3
, а далше почемуто не работает.
1
length :1
arr[0]:прикольно
2
length :2
arr[0]:прикольно
3
length :2
arr[0]:прикольно
temp[0]:прикольно
Может с функцией clon что-то не так?
И в общем: что я делаю не так?
p.s. код был на немецком и я заменил его на нормальный. И также внес изменения по подсказке
res2001