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++数据类型的结构?很明显,你没有尝试过。您似乎认为,结构> /COML> S有一些神奇之处,使它们对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;