假设我有一个整数队列,
#include <iostream>
#include <queue>
using namespace std;
int main() {
int firstValToBePushed = 1;
queue<int> CheckoutLine;
CheckoutLine.push(firstValeToBePushed);
cout << CheckoutLine.front();
return 0;
}
如何使用一个包含指向整数的指针的队列来完成相同的事情,而不像上面那样整数。我打算制作一个循环来制作多个值,但这只是一个更简单的例子。
谢谢,
答案 0 :(得分:4)
如果那是终身管理,那么:
std::queue<std::shared_ptr<int>> CheckoutLine;
CheckoutLine.push(std::make_shared<int>(firstValeToBePushed))
如果您的队列类似于代理,而其他人实际上拥有对象的生命周期,那么肯定:
std::queue<std::reference_wrapper<int>> CheckoutLine;
CheckoutLine.push(firstValeToBePushed)
如果您没有将队列暴露在任何地方并且它是内部的,那么然后存储指针就好了,正如其他人建议的那样。
但是,永远不会向客户端公开指针集合,这是你可以做的最糟糕的事情,因为你要承担管理生命周期的负担,这对集合来说更加麻烦。 / p>
当然对于原始类型或POD,只需复制即可,无需存储指针。移动语义使得即使对于非POD也很容易,除非你有一些棘手的构造,或者你的对象无法实现移动语义。
#include <functional>
的{{1}}和std::reference_wrapper
,#include <memory>
和朋友的std::shared_ptr
。我假设您可以访问现代编译器。
答案 1 :(得分:2)
为您添加循环。
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int*> theQueue;
char c = 'n';
while (c == 'n') {
cout << "Enter \'n\' to add a new number to queue ( \'q\' to quit):";
cin >> c;
if ( c == 'q') {
break;
}
else {
int num;
cout << "Enter an integer and press return: ";
cin >> num;
theQueue.push(new int(num));
}
}
while( !theQueue.empty() ) {
cout << theQueue.front() << ": " << *theQueue.front() << endl;
delete theQueue.front();
theQueue.pop();
}
return 0;
}
答案 2 :(得分:0)
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int value = 1337;
int* firstValeToBePushed = &value;
queue<int*> CheckoutLine;
CheckoutLine.push(firstValeToBePushed);
cout << *(CheckoutLine.front()) << "is at " << CheckoutLine.front();
return 0;
}
答案 3 :(得分:0)
我不太明白,也许你想要这样做:
#include <iostream>
#include <queue>
using namespace std;
int main(){
int firstValueToBePushed = 1;
queue<int *> CheckoutLine;
CheckoutLine.push(new int(firstValueToBePushed));
cout << *CheckoutLine.front() << endl;
return 0;
}