簡體   English   中英

vector.empty() 如何工作?

[英]how vector.empty() works?

我想檢查一個特定的向量元素是否已初始化......我用谷歌搜索了它,我發現了vector::empty但它似乎對我不起作用,因為它在任何情況下都會返回true !!!

int main() {
int n, k;
cin >> n >> k;
auto tasks = new vector<list<int> *>(n);
tasks->insert(tasks->begin(), new list<int>);
tasks->insert(tasks->begin() + 1, new list<int>);
tasks->insert(tasks->begin() + 2, new list<int>);
tasks->insert(tasks->begin() + 3, new list<int>);
tasks->insert(tasks->begin() + 4, new list<int>);
if (tasks->at(2)->empty()) cout << "empty";
return 0;}

它一直打印“空”!

因為您沒有調用std::vector::empty() ,所以您調用std::list::empty()

在向量的開頭插入 5 個空列表,然后在索引 2 的列表上調用empty()


旁注:您的向量是用n列表創建的,然后再插入 5 個。 你確定這是預期的行為嗎?

此外,使用insert()效率低下。 由於您的所有列表都是空的,因此您將在哪里插入新列表並不重要,因此您也可以在最后添加它們。 您可以通過調整向量的大小來做到這一點:

auto tasks = vector<list<int>>(n);
tasts.resize(n+5); //or just construct vector with n+5 lists initially
if (tasks.at(2).empty()) cout << "empty";

旁注2:您使用了太多new的 . 讓您的生活更輕松並停止它:

auto tasks = vector<list<int>>(n);
tasks.insert(tasks.begin(), list<int>{});
tasks.insert(tasks.begin() + 1, list<int>{});
tasks.insert(tasks.begin() + 2, list<int>{});
tasks.insert(tasks.begin() + 3, list<int>{});
tasks.insert(tasks.begin() + 4, list<int>{});
if (tasks.at(2).empty()) cout << "empty";

您正在對向量的第三個元素調用empty() ,該元素的類型為std::list* ,並且還有一個empty()成員 function。

您的代碼打印“空”,因為向量索引 2 處的列表為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM