【问题标题】:C++ dynamic array - via copying two arraysC++ 动态数组 - 通过复制两个数组
【发布时间】:2013-03-16 21:52:17
【问题描述】:

我需要调整一个数组的大小并在那里复制值...所以我知道,我需要一个动态数组,但我不能使用vector 并且必须使用静态数组..我写了这样的东西:

string names1[0];

bool foo(const char * inFile1) {
int size = 0;
ifstream myfile(inFile1);
if (myfile.is_open()) {
    // iterate through lines
    while (getline(myfile, line)) {            
        string tmp[++size];
        for (int i=0; i!=size;i++)     
            tmp[i]=names1[i];
        names1=tmp;
        names1[size]=line;
    }
}
}

不过在线names1=tmp; 我明白了

main.cpp:42:20:错误:将'std::string [(((unsigned int)(((int)(++ size)) + -0x000000001)) + 1)]'分配给'时不兼容的类型标准::字符串 [0]'

...我是 C++ 新手,作为一个 javaguy,我真的很困惑 :-S 感谢您的任何建议,如何解决这个问题..

【问题讨论】:

  • 您的问题自相矛盾。标题中有“动态数组”,但问题是“必须使用静态数组”。
  • 数组不可赋值。所以如果你有一个数组Type arr[N];,每次尝试赋值arr = whatever;都会导致编译错误。
  • 每当我在同一个句子中看到(或听到)“动态”和“数组”这两个词时,我都会想到std::vector
  • @EricUrban 我是这么写的,因为每次有人询问动态数组时,答案都是“使用向量”......我只是想说,我需要创建另一个数组,它比前一个大...然后将此数组的引用添加到第一个O_o
  • @Dworza 静态和动态数组本质上是不同的东西。

标签: c++


【解决方案1】:

变量names1 是一个包含零项的数组(这本身就是一个问题),您尝试为该变量分配一个字符串。这将不起作用,因为字符串数组不等于字符串。

首先,我建议您使用std::vector 而不是一个大小为零的数组。

要继续,您不需要逐个字符地将其复制到临时变量中,只需将读取的字符串添加到向量中即可:

std::vector<std::string> names1;

// ...

while (std::getline(myfile, line))
    names1.push_back(line);

如果您不能使用std::vector,那么您必须分配一个适当的数组,其中更多 个条目大于零。如果超过了,则必须重新分配它以增加数组的大小。

类似:

size_t current_size = 1;
std::string* names1 = new std::string[current_size];

size_t line_counter = 0;
std::string line;
while (std::getline(myfile, line))
{
    if (line_counter > current_size)
    {
        std::string* new_names1 = new std::string[current_size * 2];
        std::copy(names1, names1 + current_size, new_names1);
        delete[] names1;
        names1 = new_names1;
        current_size *= 2;
    }
    else
    {
        names1[line_counter++] = line;
    }
}

【讨论】:

  • @JesseGood 用 dynamic 数组解决方案更新了我的答案,但如果 OP 真的想要一个 static 数组,那么 OP 就必须弄清楚出他/她自己。
  • Ty...这就是我要找的东西 :) 我不是说像对象修饰符这样的静态,但我不知道如何解释,我不想使用矢量但是数组...在您的解决方案中,std:copy 函数中有一个小错误,第三个参数应该是new_names1 ...但是无论如何-非常感谢:)
猜你喜欢
  • 2021-07-22
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多