向量与模板相关编程代码

#include <iostream>
#include <string>
#include <vector>

template<typename T>
struct S {
    T val;
    S() {}
    S(T value) : val(value) {}
    T& get() { return val; }
    const T& get() const { return val; }
    S<T>& operator=(const T& value) {
        val = value;
        return *this;
    }
};

template<typename T>
void read_val(T& v) {
    std::cin >> v;
}

template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec) {
    os << "{ ";
    for (const auto& val : vec) {
        os << val << ", ";
    }
    os << "}";
    return os;
}

template<typename T>
std::istream& operator>>(std::istream& is, std::vector<T>& vec) {
    char ch;
    T val;
    is >> ch;  // Read '{'
    while (is >> val) {
        vec.push_back(val);
        is >> ch;  // Read ',' or '}'
        if (ch == '}') {
            break;
        }
    }
    return is;
}

int main() {
    S<int> s1(10);
    S<char> s2('A');
    S<double> s3(3.14);
    S<std::string> s4("Hello");
    S<std::vector<int>> s5({1, 2, 3, 4});

    std::cout << s1.get() << std::endl;
    std::cout << s2.get() << std::endl;
    std::cout << s3.get() << std::endl;
    std::cout << s4.get() << std::endl;
    std::cout << s5.get() << std::endl;

    read_val(s1.get());
    read_val(s2.get());
    read_val(s3.get());
    read_val(s4.get());

    std::cout << s1.get() << std::endl;
    std::cout << s2.get() << std::endl;
    std::cout << s3.get() << std::endl;
    std::cout << s4.get() << std::endl;

    std::vector<int> vec;
    read_val(vec);
    S<std::vector<int>> s6(vec);
    std::cout << s6.get() << std::endl;

    return 0;
}


定义了一个类模板 S,其中包含一个成员变量 val。
添加了构造函数,使得能够对 T 进行初始化。
定义了 S<int> s1(10)、S<char> s2('A')、S<double> s3(3.14)、S<std::string> s4("Hello") 和 S<std::vector<int>> s5({1, 2, 3, 4}),并对其进行初始化。
读取并打印了上述变量的值。
添加了成员函数 get(),该函数返回对 val 的引用。
在类外部编写了 get() 的定义。
将 val 设为私有成员。
通过 get() 函数完成了练习4中的任务。
添加了函数模板 operator=(const T&),取代了 set() 函数。
编写了 get[] 的 const 版本和非 const 版本。
定义了函数模板 read_val(T& v),该函数能够将 cin 中读取的值写入 v。
通过 read_val() 读取值,存入练习3中前四个变量。
加分题: 为 vector<T> 定义输入和输出运算符 (>> 和 <<)。这两个运算符都使用 {val, val, val, val} 格式。这使得 read_val() 也能处理 S<vector<int>> 变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值