C++11 是否有将单链表转换为std::vector的标准程序?
拥有C++11 是否有将单链表转换为std::vector的标准程序?,c++11,struct,stdvector,singly-linked-list,C++11,Struct,Stdvector,Singly Linked List,拥有 struct addrinfo{ 国际爱荷华旗; 国际爱欧家族; 国际型; 国际原子能机构议定书; 索克伦·塔伊·阿德伦; 结构sockaddr*ai_addr; char*ai_canonname; 结构addrinfo*ai_next; }; typedef结构addrinfo*PADDRINFOA; 我发现将它表示为std::vector的唯一方法(感谢Jeffrey)是声明 typedef结构sAddrInfo{ 国际爱荷华旗; 国际爱欧家族; 国际型; 国际原子能机构议定书;
struct addrinfo{
国际爱荷华旗;
国际爱欧家族;
国际型;
国际原子能机构议定书;
索克伦·塔伊·阿德伦;
结构sockaddr*ai_addr;
char*ai_canonname;
结构addrinfo*ai_next;
};
typedef结构addrinfo*PADDRINFOA;
我发现将它表示为std::vector的唯一方法(感谢Jeffrey)是声明
typedef结构sAddrInfo{
国际爱荷华旗;
国际爱欧家族;
国际型;
国际原子能机构议定书;
索克伦·塔伊·阿德伦;
结构sockaddr*ai_addr;
char*ai_canonname;
//没有下一个指针
}NoListAddrInfo;
然后
paddrinfoanext=myAddrInfo;
ret->addr_vect.clear();
for(size\u t i=0;next!=NULL;i++)
{
ret->addr_vect.push_back(sAddrInfo());
ret->addr\u vect[i]。ai\u flags=next->ai\u flags;
ret->addr\u vect[i].ai\u family=next->ai\u family;
ret->addr\u vect[i]。ai\u socktype=next->ai\u socktype;
ret->addr\u vect[i].ai\u protocol=next->ai\u protocol;
ret->addr\u vect[i].ai\u addrlen=next->ai\u addrlen;
ret->addr\u vect[i].ai\u addr=next->ai\u addr;
下一步=下一步->下一步;
}
有没有办法用更少的指令来实现这一点?如果你问如何将这些结构之一放入向量中
typedef struct addrinfo ADDRINFO;
std::vector<ADDRINFO> myvec;
myvec.push_back(ADDRINFO());
myvec[0].ai_flags= 42;
typedef结构addrinfo addrinfo;
std::载体myvec;
myvec.push_back(ADDRINFO());
myvec[0].ai_flags=42;
在任何情况下,您的结构应如下所示:
struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
struct sockaddr *ai_addr;
char *ai_canonname;
// notice the lack of `ai_next`
};
如果你真的想保留链表,你应该使用或(双链表):
结构只是类
std::vector<addrinfo> myvec;
myvec.push_back(addrinfo());
myvec[0].ai_flags = 42;
std::vector myvec;
myvec.push_back(addrinfo());
myvec[0].ai_flags=42;
如果你想使用括号,你最好坚持使用vector
@bobah,我需要将结构包装成列表或vector@Strelok这不是一个问题。问题通常以问号结尾。有没有一种干净的方式来封装C++数据类型的结构?很明显,你没有尝试过。您似乎认为,
而不是->
。并且类型定义
应该被删除。即使您保留了它,也不要称它为PADDRINFO
,因为它通常表示指针类型(P
)。谢谢-上面的示例根据Nabla/Lightness的注释编辑,这不会创建指向addrinfo的指针,在ai_标志旁边没有值吗?我在给出的示例中没有看到任何指针。你得到的是一个向量,其中有一个元素,即addrinfo。你可以像你所看到的那样完全访问它。“保罗,问题是我需要把一个已经填写好的链接列表AdRefFOS(ADDReFix**),也就是STD中GETADDRIONFILE的结果::ListVyu应该真正阅读C++书籍并掌握基本知识。你不应该试图匆忙编程,或者通过从互联网上学习作弊,一次只问一个错误的问题:p
std::vector<addrinfo> vector;
std::vector<addrinfo> myvec;
myvec.push_back(addrinfo());
myvec[0].ai_flags = 42;