Skip to content

ignassimkunas/Vec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vector

Custom std::vector class in C++.

Method examples:

  • erase:
iterator erase(iterator it){
		size_t count = 1;
		iterator i = begin();
		while (i != it){
			i++;
			count++;
		}
		pointer temp = allocator.allocate(sz - 1);
		std::copy(elem, elem + count, temp);
		std::copy(elem + count, elem+sz, temp + count -1);
		delete[] elem;
		elem = temp;
		sz--;
		return i;
	}
Vector<int> v1;
	for (auto i = 0; i < 8; ++i){
		v1.push_back(i+1);
	}
	v1.erase(v1.begin()+1);
	for (auto i = 0; i < v1.size(); ++i){
		std::cout << v1[i];
	}
  
  
1345678
  • shrink_to_fit:
void shrink_to_fit(){
		pointer temp = allocator.allocate(sz);
		std::copy(elem, elem+sz, temp);
		delete[] elem;
		elem = temp;
		cpct = sz;
	}
  
Vector<int> v1;
	for (auto i = 0; i < 10; ++i){
		v1.push_back(i+1);
	}
	std::cout << v1.capacity() << "\n";
	v1.shrink_to_fit();
	std::cout << v1.capacity();
  
  16
  10
  • assign:
void assign(iterator element, iterator lastElem){
		size_type count = 0;
		for(auto i = element; i != lastElem; i++){
			elem[count] = *i;
			count++;
			sz++;
		}
	}
Vector<int> v1;
	Vector<int> v2;
	for (auto i = 0; i < 5; ++i){
		v1.push_back(i+1);
	}
	v2.assign(v1.begin(), v1.end());
	for (auto i = 0; i < v2.size(); ++i){
		std::cout << v2[i];
	}
  
12345
  • operator=:
Vector& operator=(const Vector& v){
		sz = v.sz;
		cpct= v.cpct;
		if (cpct < v.cpct){elem = allocator.allocate(v.cpct);}
		for (auto i = 0; i < v.sz; ++i){elem[i] = v.elem[i];}
	}
Vector<int> v1;
	Vector<int> v2;
	for (auto i = 0; i < 5; ++i){
		v1.push_back(i+1);
	}
	v2 = v1;
	for (auto i = 0; i < v2.size(); ++i){
		std::cout << v2[i];
	}
  12345
  • reserve:
void reserve(size_type val) {
		if (val > cpct){
			cpct = val;
			pointer temp = allocator.allocate(cpct);
			std::copy(elem, elem + sz, temp);
			delete[] elem;
			elem = temp;
		}
	}
Vector<int> v1;
	for (auto i = 0; i < 5; ++i){
		v1.push_back(i+1);
	}
	std::cout << v1.capacity() << "\n";
	v1.reserve(50);
	std::cout << v1.capacity();
  
  8
  50

Time calculations:

  • 10000 elements:
std::vector užpildymo laikas su 10000 int elementų.0.000252229
Vector užpildymo laikas su 10000 int elementų.0.000167087
  • 100000 elements:
std::vector užpildymo laikas su 100000 int elementų.0.00210143
Vector užpildymo laikas su 100000 int elementų.0.00130014
  • 1000000 elements:
std::vector užpildymo laikas su 1000000 int elementų.0.0172255
Vector užpildymo laikas su 1000000 int elementų.0.0114977
  • 10000000 elements:
std::vector užpildymo laikas su 10000000 int elementų.0.0685323
Vector užpildymo laikas su 10000000 int elementų.0.0454282
  • 100000000 elements:
std::vector užpildymo laikas su 100000000 int elementų.0.486892
Vector užpildymo laikas su 100000000 int elementų.0.355825

Memory distributions

std::vector memory distributions: 27
Vector memory distributions: 27

About

Custom std::vector copy.

Resources

Stars

Watchers

Forks

Packages

No packages published