gpt4 book ai didi

c++ - 打印整数指针 vector 的值

转载 作者:行者123 更新时间:2023-11-30 01:37:12 28 4
gpt4 key购买 nike

我创建了一个整数 vector ,如何在 vector 中取消引用以打印值

#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);//?????????//how to print value of vector
}
std::cout << '\n';
return 0;
}

最佳答案

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;
}

但是拥有一个指向整数的指针 vector 是毫无意义的,您可能只需要一个 int vector 。那么你需要这个:

#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 中,你可以这样写来遍历 vector :

for (auto & i: myvector) {
std::cout << ' ' << i;
}

这样就简单多了。

关于c++ - 打印整数指针 vector 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50115661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com