我正在寻找一种解决方案,该解决方案如何找到不包含任何元素的一维数组。到目前为止,我已经完成了一些漂亮的代码,但是如果有其他解决方案,那会很好。
Code_01
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> mylist{};
if (mylist.empty()) {
cout << "True";
}
else {
cout << "False";
}
return 0;
}
Code_03
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> myvector{};
if (myvector.empty()) {
cout << "True";
}
else {
cout << "False";
}
return 0;
}
答案 0 :(得分:2)
在cppreference上对std::empty
的引用回答了您的问题:
返回给定的容器是否为空。
1)返回c.empty()
2)返回false
3)返回il.size()== 0
参数
c-具有空方法的容器
array-任意类型的数组
il-初始化列表
这意味着,数组永远不会为空。数组的大小固定。
答案 1 :(得分:0)
您是否尝试编译这些代码段?
第一个肯定会失败。您引用的是内置类型(int
),就好像它是一个对象一样,不是。
第二个也有类似的问题(将内置类型称为对象),尽管您可以通过调用std::empty(myarray)
来逃脱。请注意,定义指向int
的指针然后分配mypointer=myarray
的行是无用的:由于数组名称是指向第一个元素的指针,因此您只是在创建它的副本不会修改。因此,这浪费了内存。另外,在处理空指针时,建议使用nullptr
或至少使用宏NULL
,因为它们更容易出现在大量代码中,并且不易随意修改。最后但并非最不重要的一点是,if指针永远不会失败,因为指针将始终包含一个地址。回到可能的解决方案中,我仍然认为std::empty()
会在编译期间失败,因为浏览他的文档时,似乎无法将数组作为参数,这很有意义,因为数组永远不会永远为空,它们最多可以包含未初始化的值。
由于向量的构建方式,第三个代码片段将按预期进行编译和工作。
我不知道是否可行,但是如果您具有固定的数据大小并希望避免array
的(小)开销,那么您可能需要查看vector
对象文档。 / p>