【问题标题】:Does vector<string>** p = new vector<string> * [10]; make any sense in C++?向量<字符串>** p = 新向量<字符串> * [10];在 C++ 中有意义吗?
【发布时间】:2020-03-31 00:02:45
【问题描述】:

我遇到了一个代码 sn-p。

判断定义是否正确是一个C++练习。

vector<string>** p = new vector<string> * [10];

我认为这是错误的,因为 lvalue 将 p 声明为指向字符串向量的指针。

右值是指向字符串向量的指针的十个数组。

但是代码编译成功,没有警告。

这个定义有意义吗?

【问题讨论】:

  • 你觉得int* array = new int[10];怎么样?

标签: c++ string pointers vector


【解决方案1】:

声明合法且格式正确。

new T[...] 返回一个T* 指针,在这种情况下Tvector&lt;string&gt;*。因此,new vector&lt;string&gt;*[...] 返回一个 vector&lt;string&gt;**,这就是 p 声明的内容。

但是,这种编码在现代代码中也相当无用,所以不,它没有“意义”。它应该更像这样:

vector&lt;vector&lt;string&gt;*&gt; p(10);

或者,更有可能(假设个人vectors 将被分配new):

vector&lt;std::unique_ptr&lt;vector&lt;string&gt;&gt;&gt; p(10);

但实际上,应该只是这样:

vector&lt;vector&lt;string&gt;&gt; p(10);

然后,由于使用的是固定长度,所以外部的vector 应该改为std::array

array&lt;vector&lt;string&gt;, 10&gt; p;

很少动态地分配标准 C++ 容器是否有意义。

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2012-09-05
    • 2011-10-30
    • 2013-11-12
    • 2018-11-05
    相关资源
    最近更新 更多