我正在编写一个包含字符串的类。它基本上是一个可以容纳字符串的容器。我想知道随着容器变大如何扩展容器的大小。
现在我有一个包含字符串的数组,数组的大小设置为 10。我曾考虑过创建一个二维数组,但由于无论如何都会任意分配大小,所以不要认为这会产生任何影响。
class stringlist {
public:
typedef std::string str;
void push(str);
void pop();
void print();
private:
str container[10];
};
void stringlist::push(str s)
{
size_t sz = sizeof(container) / sizeof(*container);
str* ptr = container;
while(ptr[sz] != "" && *ptr != "")
++ptr;
*ptr = s;
}
void stringlist::pop()
{
size_t sz = sizeof(container) / sizeof(*container);
str* ptr = container;
while(ptr != ptr + sz)
++ptr;
*ptr = "";
}
void stringlist::print()
{
size_t sz = sizeof(container) / sizeof(*container);
str* ptr = container;
while(ptr[sz] != "" && *ptr != "")
std::cout << *ptr++ << " ";
std::cout << std::endl;
}
EDIT
基本上我正在寻找某种动态内存分配。str* container = new str[N]
哪里N
可以指定。但我不确定如何在事先不知道 N 的情况下实施。
如果我使用构造函数,我会得到一个错误:
public:
stringlist() : N(15) {}
stringlist(size_t sz) : N(sz) {}
private:
str* container = new str[N];
size_t N;
ERROR
a.out(29866,0x7fff76388310) malloc: *** mach_vm_map(size=3377629375143936) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
EDIT
我实际上让它与构造函数方法一起工作。N
在分配给我错误的容器后,我设置了 begin 的值。我切换了顺序并开始工作。
NOTE:
这还没有解决我添加元素时列表增长的问题。
_____________________________________________________________________________________
REFLECTION
似乎如果我更改数据成员的值,N
则数组的大小会重新分配为该大小。我认为,由于数组是在创建对象时创建的,因此数组不会改变大小,但是在编写和运行一些函数之后,它就是这样做的。