
Python中可以实现可变参数,而在C++中其实也可以,实现起来有点骚。
Python中的可变参数:
1 2 3 4 5 6
|
MOD = 998244353 def (*args): ret = 1 for i in args: ret = ret * i % MOD return ret
|
用C++实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
const long long MOD = 998244353LL;
long long mod(long long x, long long p = MOD) { return ((x % p) + p) % p; }
long long () { return 1LL; }
template <typename T, typename ...U> long long (const T &head, const U &... tail) { return mod((head % MOD) * mmod(tail...), MOD); }
|
上面的return mod((head % MOD) * mmod(tail...), MOD);中的使用的mmod函数会根据tail的个数来指向正确的函数。
你还可以弥补某些STL的不足,比如说:
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
|
template<typename T> class List : public vector<T> { public:
template<typename ...U> List(const U &... tail) : vector<T>(0) { pb(tail...); }
void pb() {} template<typename ...U> void pb(const T & head, const U &... tail) { this->push_back(head); pb(tail...); }
void print() { const int LEN = this->size(); for (int i = 0; i < LEN; i++) { cout << (*this)[i] << (i == LEN - 1 ? 'n' : ' '); } } };
|
这样你就可以愉快地一次性push_back很多东西了。
例如: List x = List(1, 3, 4); ,非常舒服。
回到开头
近期评论