该语句在堆上创建一个 vector :
std::vector<int>* pVector = new std::vector<int>();
因此,如果我在main()
或某处声明它,如何在另一个函数中访问它?例如:#include <iostream>
#include <vector>
void insert(int value);
int main (){
int n = 1;
std::vector<int>* pVector = new std::vector<int>();
insert(n);
return 0;
}
void insert (int value){
pVector->push_back(value); //ERROR "was not declared in this scope"
std::cout << pVector[0] << "\n"; //ERROR
}
我正在独自学习和学习,指针和引用比我预期的要复杂得多,因此,我们将不胜感激。
最佳答案
这与堆使用无关。pVector
只是main()
的局部变量,因此只有main()
可以使用它。从任何其他函数访问std::vector
对象的唯一方法是显式传递指向它的指针/引用。
您可以使用输入参数来传递它,例如:
#include <iostream>
#include <vector>
void insert(std::vector<int>& vec, int value);
int main (){
int n = 1;
std::vector<int>* pVector = new std::vector<int>();
insert(*pVector, n);
...
delete pVector;
/* this works, too:
std::vector<int> vec;
insert(vec, n);
...
*/
return 0;
}
void insert (std::vector<int>& vec, int value){
vec.push_back(value);
std::cout << vec[0] << "\n";
}
或者,您可以使用全局变量,例如:#include <iostream>
#include <vector>
std::vector<int>* pVectorToInsertInto;
void insert(int value);
int main (){
int n = 1;
std::vector<int>* pVector = new std::vector<int>();
pVectorToInsertInto = pVector;
insert(n);
...
delete pVector;
/* this woks, too:
std::vector<int> vec;
pVectorToInsertInto = &vec;
insert(n);
...
*/
return 0;
}
void insert (int value){
pVectorToInsertInto->push_back(value);
std::cout << (*pVectorToInsertInto)[0] << "\n";
}
通常,如果可以避免,请不要使用全局变量。
关于c++ - 如果在堆上创建 vector ,是否意味着我可以从任何其他函数访问它?怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63693871/