吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 750|回复: 4
收起左侧

[求助] C++ 2.0

[复制链接]
zishen 发表于 2024-1-21 17:03
image.png 今天学侯捷老师的C++课程,Variadic Templates
image.png
像这样规格输出,我想尝试把tuple改成vector,但是不知道为什么只能输出前两个数?
请大佬解惑!!!
image.png image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hamon 发表于 2024-1-21 17:52
[C++] 纯文本查看 复制代码
#include <iostream>
#include <vector>
using namespace std;
template<int IDX, int MAX, typename...Args> 

struct PRINT_TUPLE {

    static void print(ostream& os, const vector<Args...>& t) { 
        
        os<< t[IDX]<<(IDX+1== MAX ?"":",");

        PRINT_TUPLE<IDX + 1, MAX, Args...>::print(os,t);
    }
};

template <int MAX,typename... Args> 

struct PRINT_TUPLE<MAX, MAX,Args...>{

    static void print(ostream& os, const vector<Args...>& t) {} 
};

template <typename... Args>

ostream& operator<<(ostream& os, const vector<Args...>& t){
    os<<"t.size :"<<t.size() <<'\n';
    os<<"sizeof :"<<sizeof...(Args) <<'\n';
    os<<"[";
    PRINT_TUPLE<0, sizeof...(Args), Args...>::print(os,t); 
    return os <<"]";
}

int main()
{
    vector<int> arr{1,2,3,4};
    cout<<arr;

}


输出:
t.size :4
sizeof :2
[1,2]
ciker_li 发表于 2024-1-21 19:28
本帖最后由 ciker_li 于 2024-1-21 19:34 编辑

不太懂...
AhKeiya 发表于 2024-1-21 21:44
本帖最后由 AhKeiya 于 2024-1-21 21:47 编辑

[C++] 纯文本查看 复制代码
#include <iostream>
#include <vector>
using namespace std;

template <int IDX, int MAX, typename... Args>
struct PRINT_TUPLE {
    static void print(ostream& os, const vector<Args...>& t) {
        os << t[IDX];
        if (IDX + 1 < MAX) {
            os << ",";
            PRINT_TUPLE<IDX + 1, MAX, Args...>::print(os, t);
        }
    }
};

template <int MAX, typename... Args>
struct PRINT_TUPLE<MAX, MAX, Args...> {
    static void print(ostream& os, const vector<Args...>& t) {}
};

template <typename... Args>
ostream& operator<<(ostream& os, const vector<Args...>& t) {
    os << "t.size: " << t.size() << '\n';
    os << "sizeof: " << min(2, t.size()) << '\n';  // Use min(2, t.size()) instead of sizeof...(Args)
    os << "[";
    PRINT_TUPLE<0, min(2, t.size()), Args...>::print(os, t);
    return os << "]";
}

int main() {
    vector<int> arr{1, 2, 3, 4};
    cout << arr;
}
 楼主| zishen 发表于 2024-1-22 16:17
AhKeiya 发表于 2024-1-21 21:44
[mw_shl_code=cpp,true]#include
#include
using namespace std;

报错: “min”: 未找到匹配的重载函数
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表