结构中动态分配的数组 我正在学习C++中内存的动态分配。我遇到了一个似乎找不到答案的问题

结构中动态分配的数组 我正在学习C++中内存的动态分配。我遇到了一个似乎找不到答案的问题,c++,arrays,struct,C++,Arrays,Struct,在我的程序中,我有一个结构,如下所示: struct Friend { string name = ""; int daysSinceContact = 0; }; struct User { string name = ""; string password = ""; int numberOfFriends = 0; Friend *friends = new Friend[numberOfFriends]; }; int numberOf

在我的程序中,我有一个
结构
,如下所示:

struct Friend
{
    string name = "";
    int daysSinceContact = 0;
};

struct User
{
    string name = "";
    string password = "";
    int numberOfFriends = 0;
    Friend *friends = new Friend[numberOfFriends];
};
int numberOfUsers = 5;
User *usersInformation = new User[numberOfUsers];
delete[] usersInformation[0].friends[];
usersInformation[0].numberOfFriends++;
usersInformation[0].friends = new Friend[numberOfFriends];
在我的程序中,我创建了一个用户数组,如下所示:

struct Friend
{
    string name = "";
    int daysSinceContact = 0;
};

struct User
{
    string name = "";
    string password = "";
    int numberOfFriends = 0;
    Friend *friends = new Friend[numberOfFriends];
};
int numberOfUsers = 5;
User *usersInformation = new User[numberOfUsers];
delete[] usersInformation[0].friends[];
usersInformation[0].numberOfFriends++;
usersInformation[0].friends = new Friend[numberOfFriends];
而且效果很好。但我希望能够向所选用户添加更多朋友,例如:

int nFriends = usersInformation[0].numberOfFriends; 
usersInformation[0].numberOfFriends++;
usersInformation[0].friends[nFriends-1].name = "John";
usersInformation[0].friends[nFriends-1].daysSinceContact = 2;
我猜我应该使用缓冲区从包含朋友信息的数组中复制信息,并执行如下操作:

struct Friend
{
    string name = "";
    int daysSinceContact = 0;
};

struct User
{
    string name = "";
    string password = "";
    int numberOfFriends = 0;
    Friend *friends = new Friend[numberOfFriends];
};
int numberOfUsers = 5;
User *usersInformation = new User[numberOfUsers];
delete[] usersInformation[0].friends[];
usersInformation[0].numberOfFriends++;
usersInformation[0].friends = new Friend[numberOfFriends];
然后将其复制回来并添加有关新朋友的信息。但是当我试过的时候,它不起作用

您有什么建议吗?

正确的解决方案是根本不使用手动数组,而是使用STL的容器,例如:

#include <vector>
#include <string>

struct Friend
{
    std::string name = "";
    int daysSinceContact = 0;
};

struct User
{
    std::string name = "";
    std::string password = "";
    std::vector<Friend> friends;
};

...

std::vector<User> usersInformation(5);

...

Friend newFriend;
newFriend.name = "John";
newFriend.daysSinceContact = 2;
usersInformation[0].friends.push_back(newFriend);

// Or simpler:
usersInformation[0].friends.emplace_back(Friend{"John", 2});

Friend*
更改为
std::vector
,并解决您的所有问题这可能是真的,因为我还没有读到关于vectors的内容。也许我只是想用我现有的工具做一些我还做不到的事情。你当然可以用动态数组做你所描述的事情,但是要确保
new
ing、
delete
ing和复制工作正确无误,这部分是我最大的麻烦。不知何故,我的编译器阻止我执行删除[]用户信息[0]。朋友[];这是在我已有的数组中删除此数组的正确方法吗?哦,我想我应该只删除[]用户信息[0]。FriendsHanks!这真的很有帮助,也很有趣。非常感谢您的努力!:)嗨,拉法我的LIWCZYK如果这个或任何答案损坏了你的问题,请点击检查标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。