gpt4 book ai didi

c++ - 当为将放入数组的字符串列表动态分配内存时,是否可以在程序的后面添加到该列表?

转载 作者:行者123 更新时间:2023-11-30 02:42:57 27 4
gpt4 key购买 nike

我试图了解指针和数组如何在运行时动态扩展内存。我这里有这个程序来说明我在说什么。假设用户输入了 int input = 5 并且在这个程序运行完它的过程之后 sNamesID 每个都包含 5 个用户指定的字符串。如果我想让用户能够在最初的 5 个元素之后添加更多元素,我是否必须尝试创建 n+5 的新数组(其中 n 是用户想要添加的新元素数)然后除了用户输入的内容之外,还要将 sName 和 sID 的值复制到这些数组中吗?或者除了使用 vector 之外,还有更简单的方法吗?

#include <iostream>
#include <string>

using namespace std;

int main()
{
int input;
string *sName = NULL;
string *sID = NULL;
string temp, temp2;

cout << "How many names";
cin >> input;

sName = new string[input];
sID = new string[input];

for (int i = 0; i < input; i++)
{
cout << "Enter name ";
cin >> temp;
cout << "enter id ";
cin >> temp2;
*(sName + i) = temp;
*(sID + i) = temp2;
}


return 0;
}

最佳答案

小初始警告:您的代码正在泄漏内存。

也就是说我真的不明白为什么你不想为此使用 vector ,因为它需要更多的工作来实现同样的目标,你可以分配一个新的连续内存数组并将旧元素复制回来( 警告:没有经过检查的迭代器,强烈建议不要使用以下代码,它作为示例提供以供说明之用)

// I want 2 additional elements

std::string *sNameOld = sName;
std::string *sIDOld = sID;

sName = new std::string[input + 2];
sID = new std::string[input + 2];

std::copy_n(sNameOld, input, sName);
std::copy_n(sIDOld, input, sID);
delete[] sNameOld;
delete[] sIDOld;

for (int i = input; i < input+2; i++)
{
std::cout << "Enter name ";
std::cin >> temp;
std::cout << "enter id ";
std::cin >> temp2;
*(sName + i) = temp;
*(sID + i) = temp2;
}

for (int i = 0; i < input + 2; ++i) {
std::cout << sName[i] << " " << sID[i] << std::endl;
}

delete[] sName;
delete[] sID;

我强烈推荐使用 std vectors因为它们是您正在执行的任务的主要选择,因为它们提供基于堆的动态分配,并且通过调整自身大小非常灵活地添加新元素

#include <iostream>
#include <string>
#include <vector>

int main()
{
int input;
std::vector<std::string> sName;
std::vector<std::string> sID;
std::string temp, temp2;

std::cout << "How many names";
std::cin >> input;

for (int i = 0; i < input; i++)
{
std::cout << "Enter name ";
std::cin >> temp;
std::cout << "enter id ";
std::cin >> temp2;
sName.push_back(temp);
sID.push_back(temp2);
}

return 0;
}

Example

上面的代码甚至没有泄漏内存。

C 的 realloc 没有确切的 C++ 替代品,尽管您可以设计一些适合该任务的东西,例如通过使用 placement new。

引用:C++: What is the proper way of resizing a dynamically allocated array?

关于c++ - 当为将放入数组的字符串列表动态分配内存时,是否可以在程序的后面添加到该列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26584795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com