c++类模板记录

主要是为了记录指针指向的数据的列表初始,是如何通过参数列表初始化进行传递的。

#include<iostream>
using namespace std;
#include<vector>
#include<memory>

template<typename T> class Blob
{
    
    
public:
	typedef T value_type;
	typedef typename std::vector<T>::size_type size_type;

	Blob();
	Blob(std::initializer_list<T> il);

	size_type size() const {
    
     return data->size(); }
	bool empty() const {
    
     return data->empty(); }

	void push_back(const T& t) {
    
     data->push_back(t); }
	void push_back(T&& t) {
    
     data->push_back(std::move(t)); }
	void pop_back();

	T& back();
	T& operator[](size_type i);

private:
	std::shared_ptr<std::vector<T>> data;
	void check(size_type i, const std::string& msg) const;
};

template<typename T>
void Blob<T>::check(size_type i, const std::string& msg) const
{
    
    
	if (i >= data->size()) {
    
    
		throw std::out_of_range(msg);
	}
}

template<typename T>
T& Blob<T>::back()
{
    
    
	check(0, "back on empty Blob");
	return data->back();
}

template<typename T>
T& Blob<T>::operator[](size_type i)
{
    
    
	check(i, "subscript out of range");
	return (*data)[i];
}

template<typename T>
void Blob<T>::pop_back()
{
    
    
	check(0, "pop_back on empty Blob");
	data->pop_back();
}

template<typename T>
Blob<T>::Blob():data(std::make_shared<std::vector<T>>()){
    
    }

template<typename T>
Blob<T>::Blob(std::initializer_list<T> il):data(std::make_shared<std::vector<T>>(il)){
    
     // 指针指向的参数在初始化列表中的传递
	size_type sz = (*data).size();
	for (size_type i = 0; i < sz; i++) {
    
    
		cout << i<<": " << (*data)[i] << endl;
	}
}


int main()
{
    
    
	Blob<int> ia;
	Blob<int> ia2{
    
     1,2,4,5,6 };
	Blob<string> ia3{
    
     "hablee","yuki" };

	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sdhdsf132452/article/details/129946822