cpp几种可变参数包展开方法

  • 递归
void print(){
	std::cout << "\n";
}

template<typename T, typename... Args>
void print(T a, Args... args){
	std::cout << a << " ";
	print(args...);
}

template<typename... Args>
void test(Args... args){
	print(args...);
}
  • enable_if
template<size_t t = 0, typename tup>
typename enable_if<t == std::tuple_size<tup>::value>::type print(tup tup_entity){
    cout << "\n";
}

template<size_t t = 0, typename tup>
typename enable_if<t < std::tuple_size<tup>::value>::type print(tup tup_entity){
    cout << get<t>(tup_entity) << " ";
    print<t + 1>(tup_entity);
}

template<typename... Args>
void test(Args... args){
    print(make_tuple(args...));
}
  • 逗号表达式,只要是有序的初始化都可以,int数组,初始化列表等
template<typename... Args>
void test(Args... args){
    int a[]{(cout << args << " ",0)...};
    cout << endl;
    // 或
    initializer_list<int>{(cout << args << " ", 0)...};
    cout << endl;
}
  • index_sequence、index_sequence_for、make_index_sequence
template<typename Tuple, size_t I>
void print_t_impl(Tuple tup){
    cout << get<I>(tup) << " ";
}

template<typename Tuple, size_t... I>
void print_t(Tuple tup, index_sequence<I...>){
    int a[]{(print_t_impl<Tuple, I>(tup), 0)...};
    cout << endl;
}

template<typename... Args>
void test(Args... args){
    auto tupe = make_tuple(args...);
    
    print_t(tupe, make_index_sequence<sizeof...(args)>{});
    // 或
    print_t(tupe, index_sequence_for<Args...>{});
	// 或
	using Args_type = tuple<typename decay<Args>::type...>;
    constexpr auto N = tuple_size<typename decay<Args_type>::type>::value;
    print_t(tupe, make_index_sequence<N>{});
    // 或
    constexpr auto NN = tuple_size<typename decay<decltype(tupe)>::type>::value;
    print_t(tupe, make_index_sequence<N>{});
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,向`vector`加入元素有以下几种方法: 1. push_back() 使用`push_back()`函数可以向`vector`的末尾添加一个元素。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); for (int i = 0; i < vec.size(); i++) { std::cout << vec[i] << " "; } return 0; } ``` 输出结果为:`1 2 3`。 2. emplace_back() 使用`emplace_back()`函数可以在`vector`的末尾就地构造一个元素。例如: ```cpp #include <iostream> #include <vector> struct Person { std::string name; int age; }; int main() { std::vector<Person> people; people.emplace_back("Alice", 20); people.emplace_back("Bob", 30); people.emplace_back("Charlie", 40); for (int i = 0; i < people.size(); i++) { std::cout << people[i].name << " " << people[i].age << std::endl; } return 0; } ``` 输出结果为: ``` Alice 20 Bob 30 Charlie 40 ``` 3. insert() 使用`insert()`函数可以向`vector`的任意位置插入一个或多个元素。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4}; vec.insert(vec.begin() + 2, 5); vec.insert(vec.begin() + 3, {6, 7}); for (int i = 0; i < vec.size(); i++) { std::cout << vec[i] << " "; } return 0; } ``` 输出结果为:`1 2 5 6 7 3 4`。 4. resize() 使用`resize()`函数可以改变`vector`的大小,并默认将多出来的元素初始化为0。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3}; vec.resize(5); for (int i = 0; i < vec.size(); i++) { std::cout << vec[i] << " "; } return 0; } ``` 输出结果为:`1 2 3 0 0`。 5. assign() 使用`assign()`函数可以将一个或多个元素赋值给`vector`。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec; vec.assign(4, 5); for (int i = 0; i < vec.size(); i++) { std::cout << vec[i] << " "; } return 0; } ``` 输出结果为:`5 5 5 5`。 以上就是向`vector`加入元素的几种方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值