所以我在当下把头靠在墙上。我想创建一个动态数组,它可以包含数字或文本 - 但最有可能的数字。
在片刻我正在使用:
string test[];
为此目的。
好的,现在问题是。如果元素不在数组中,我想动态填充数组。我尝试使用谷歌搜索解决方案,但大多数都提出了矢量,在这种情况下它不会工作,因为数组可以是任何大小。
再次:
检查Element是否在Array中,可以是空的 如果Element不在Array中,请将其放入。
有人为此获得了解决方案吗?非常值得庆幸!
非常感谢所有这些评论和答案。我刚刚注意到我在网上发现的内容和你们发布的内容之间的一个主要区别。如果我使用test[]
它不会工作,但如果我使用test{}
一切都很好。有人可以解释一下为什么会这样吗?
答案 0 :(得分:1)
因此,如果我理解正确的话,你试图获得一个动态数组,根据那里有多少元素来改变它的大小?然后使用vector
。这真是令人兴奋!对于像这样的任务来说,它非常快,而且还有C ++标准。
使用vector
也可以使用std::find
。所以要完成你的任务,做一些类似的事情:
std::vector<std::string> test{"Hello"};
if (std::find(test.begin(), test.end(), "World!") == test.end())
test.push_back("World!");
甚至更好,使用std::set
只允许使用唯一元素:
std::set<std::string> test{"Hello"};
test.insert("World"); // works
test.insert("Hello"); // won't work
如果您真的想要使用数组,那么我建议您编写一个模板类来管理数组,然后在堆上分配数组。
template<typename T>
class Array
{
private:
T *data;
unsigned int size;
unsigned int index;
public:
Array()
{
size = 100;
index = 0;
data = new T[size];
}
~Array()
{
delete[] data;
}
void push_back(const T& val)
{
if (index == size)
{ // reallocate data if there is no memory left to store val
std::vector<T> tmp(data, data + size);
delete[] data;
size += 100;
data = new T[size];
for (size_t i = 0; i < tmp.size(); i++)
data[i] = tmp[i];
data[index++] = val;
}
else
{
data[index++] = val;
}
}
T& operator[](const unsigned int& i)
{
if (i >= size)
throw std::runtime_error("i out of bounds");
return data[i];
}
};
然后,您需要在数组中搜索现有值,如果找不到,请使用push_back
将值推送到数组中。或者像您习惯的那样使用下标运算符[]
。