c++ 正确使用指向向量的指针[已关闭]

ffx8fchx  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(156)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我有一个指针指向我的IDE中的向量设置,但我不认为我这样做是正确的,因为每次我试图推回数据到它的程序崩溃在代码中的这一点。
例如:

std::vector<int> a;  std::vector<std::vector<int> > *a1;
a.push_back(3);
a1->push_back(a); // Right here the program crashes with no indication prior to execution that there was an error.

我见过这个网站的一些其他用户有向量的指针初始化,但现在我想起来了,我不记得他们真的访问他们把数据或编辑后。也许这就是为什么我在这一点上卡住得到崩溃。所以有人能解释为什么它和发生如何做正确的向量指针。我想访问向量a1像这样:

cout<<" value is: "<<(*a1)[0][0] + 4 <<endl; // I cant even reach this far when the program runs

这是怎么回事我不明白吗?

14ifxucb

14ifxucb1#

a是一个向量。下面是a的声明(和定义):

std::vector<int> a;

a1是一个指向向量的指针。下面是a1的声明和定义,但是 * 指针没有指向定义的位置 *(感谢@user4581301指出这一点):

std::vector<std::vector<int> > *a1;

为了定义a1中的值,可以分配已经存在的矢量的地址或者经由new分配新矢量,例如

//pre defined vector
std::vector<std::vector<int>> a;

//assign address of a to a1
std::vector<std::vector<int>> *a1 = &a;

//or allocate a new vector
std::vector<std::vector<int>> *a2 = new std::vector<std::vector<int>>;

上述代码的目的是展示如何通过&的地址或new操作符获得对象**的地址。
说到“最佳实践”,我会说,避免指针使用引用。但是当需要分配时,那么

  • 可以将指针 Package 到unique_ptrshared_ptr对象中(例如在未捕获异常的情况下,保证对已分配内存块的解除分配)

例如:

//allocate a single vector<int> and insert the values 1, 2, 3
auto my_vec_ptr = std::make_unique<std::vector<int>>(1, 2, 3);
//(*my_vec_ptr).push_back(42); //dereference pointer and add the value 42

//allocates an array of 5 vector<int>
auto my_vec_array = std::make_unique<std::vector<int>[]>(5);
//my_vec_array[0].push_back(42); //adds 42 to the first vector
  • 或者使用容器,如向量、Map等。

例如:

//constructs the vector with 5 default-inserted instances of vector<int>
std::vector<std::vector<int>> my_vec_of_vec{5};
//my_vec_of_vec[0].push_back(42); //adds 42 to the first vector
//my_vec_of_vec.push_back(std::vector<int>{1,2,3}); //add a new vector to the list

相关问题