【问题标题】:Changing my array definitions to Vectors or Lists?将我的数组定义更改为向量或列表?
【发布时间】:2013-06-19 08:48:56
【问题描述】:

根据那个问题,我越来越担心我的项目中内存的管理,当其中一个数组内存发生冲突时,我的程序会崩溃。

this posted question 的不同答案都集中在了这样一个事实,即我会将我的数组更改为向量,并且我的一些数组定义如下:

#define Nb 50
int position[Nb];
double indication[Nb];
double sum[Nb];

如何将它们中的每一个更改为

 std::vector
 std::list?

我们可以在更改声明时操作/处理它们(例如按升序组织它们或覆盖其中一个值)吗?

【问题讨论】:

  • T x[N]; 变为 std::vector<T> x(N);。不要使用列表。
  • 如果您想要一个大小在构造时固定的动态容器,另请参见 C++14 std::dynarray。但是与您的示例类似的是std::array<int, 50>

标签: c++ visual-studio-2010 memory


【解决方案1】:

您正在使用固定大小的数组,

#define Nb 50
int position[Nb];

这些的现代 C++ 替代品是 std::array,而不是 std::vector

std::array<int, 50> position;

std::vector是一个动态大小的数组,它的大小可以在运行时确定并且可以在构造后改变。

int n;
std::cin >> n;
std::vector<int> v(n); // vector has n value constructed ints
v.push_back(42); // v has n+1 ints now.

C++14 提供std::dynarray,这是一个动态大小的数组,其大小可以在运行时确定,但不能在构造后更改。

【讨论】:

  • 谢谢。使用该声明时值的操作/分配是否相同,我的意思是:例如,我将编写 position[0]=0 和 position[2]=4 ?
  • @MelMed 是的,它完全一样,尽管容器也为您提供迭代器,在这种情况下,它看起来非常类似于指向 C 样式数组元素的指针。
  • 但例如 memcopy 和 memset 似乎不适用于该类型。一个想法如何做到这一点?
  • @MelMed 您不使用memcopymemset。你真的不需要它们。如果你给出你试图用 C 数组做什么的例子,那么展示 C++ 等价物会更容易。
  • 是的,当然。我正在使用 memset(position, 0, sizeof(position));和 memcpy(sum_copy, sum, sizeof(sum_copy));
【解决方案2】:

语法如下:

#define Nb 50
std::vector<int> position(Nb); // create std::vector holding ints, Initial size is 50

你也应该避免使用#define,而是使用const,这更像是C++

const int Nb = 50; //maybe wrap Nb in a namespace
 std::vector<int> position(Nb);

参见vector 及其构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多