动态(非静态)内存c ++?

时间:2014-12-09 17:07:12

标签: c++ arrays memory malloc

创建具有未定义大小的数组的最佳方法是什么? 我有数千个需要放入数组的措施。这些值由传感器提供。所以我最后才知道阵列的大小;当传感器停止发射时。

我这样做

#define MAX_SIZE 100000000

double array[MAX_SIZE]

但是,除了比MAX_SIZE更多的度量之外,我从编译器收到此错误消息: :R_X86_64_32针对.bss' __ static_initialization_and_destruction_0':

是否存在一种不具有特异性或强加指针的初始(静态)大小但让它自动增长的方式?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

在您的情况下,最好的选择是使用STL向量。

#include <iostream>
#include <vector>

using namespace std;

vector<double> v;

int main() {
    v.push_back(3.0); // Add an item
    v.push_back(5.0);
    v.push_back(7.0);
    v.push_back(8.0);

    cout << "v[0]: " << v[0] << endl; // Access an item
    cout << "v[1] + v[2]: " << v[1] + v[2] << endl;

    cout << "Size: " << v.size() << endl; // Size

    v.resize(2); // It will remove items except for the first two

    double sum = 0.0;

    vector<double>::iterator it;
    it = v.begin();
    while (it != v.end())
    {
        sum += *it;
        it++;
    }
    cout << "Sum: " << sum << endl;

    v.resize(0); // It will empty a vector

    cout << "Size: " << v.size() << endl;

    return 0;
}

它是一个动态数组,必要时会自动扩展。您可以通过索引从数组获取项目,使用迭代器迭代它,清除它或调整大小。

您可以在这里阅读参考资料: http://www.cplusplus.com/reference/array/array/

答案 1 :(得分:3)

我认为最好的方法是使用带有初始保留内存的标准容器std::vector。 您还可以使用其成员函数max_size来确定可以在向量中分配的元素数。

例如,在线MS VC ++编译器显示以下值536870911:)

#include <iostream>
#include <vector>

int main()
{
    std::vector<double> v;

    std::cout << " max size = " << v.max_size() << std::endl;
}

Compiled with /EHsc /nologo /W4
main.cpp

Compilation successful!

Total compilation time: 187ms

 max size = 536870911

Total execution time: 531ms