我创建了一个整数向量,如何在向量中取消引用以打印值
data
答案 0 :(得分:3)
myvector.push_back(&i);
不符合你的想法。变量i
仅存在于for
循环的范围内,因此存储其地址不会按预期工作,并且地址很可能是相同的。这是未定义的行为:
在我的平台上,输出为:
6 6 6 6 6
而不是
1 2 3 4 5
你错过了*
(见下面代码中的评论)。所以你可能想要这个:
#include <iostream>
#include <vector>
int main()
{
std::vector<int*> myvector;
for (int i = 1; i <= 5; i++) {
myvector.push_back(new int(i)); // new int() allocated a new pointer to int
// and puts i there
}
std::cout << "myvector contains:";
for (std::vector<int*>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
// ^<<<<<<<<<<<< you missed this *
std::cout << ' ' << **it;
}
std::cout << '\n';
// and now we need to delete the allocted pointers
for (std::vector<int*>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
delete *it;
}
return 0;
}
但是有一个指向整数的指针向量是没有意义的,你可能只想要一个int
的向量。然后你需要这个:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> myvector;
for (int i = 1; i <= 5; i++) {
myvector.push_back(i);
}
std::cout << "myvector contains:";
for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
std::cout << ' ' << *it;
}
std::cout << '\n';
return 0;
}
在C ++ 11中,您可以编写此代码来迭代向量:
for (auto & i: myvector) {
std::cout << ' ' << i;
}
这简单得多。
答案 1 :(得分:1)
我希望您只是在达到最小代码时输入错字:myvector.push_back(&1);
。所以我跳过它然后继续你的问题。
如果std::vector<int> myvector
(问题中):
for (const auto v : myvector){
std::cout << ' ' << v;
}
如果std::vector<int*> myvector
(标题中):
for (const auto p : myvector){
std::cout << ' ' << *p;
}
<强>更新强>
myvector.push_back(&i);
也不正确。您将指针推送到本地范围的变量i
。有两个问题:
for
和未定义的行为之后,你会得到悬空指针。