C ++动态数组 - 通过复制两个数组

时间:2013-03-16 21:52:18

标签: c++

我需要调整数组的大小并将值复制到那里......所以我知道,我需要一个动态数组,但我不能使用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: error: incompatible types in assignment of ‘std::string [(((unsigned int)(((int)(++ size)) + -0x000000001)) + 1)]’ to ‘std::string [0]’

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

1 个答案:

答案 0 :(得分:2)

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

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

要继续,您不需要逐个字符复制到临时变量中,只需将读取字符串添加到矢量中:

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

// ...

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

如果您无法使用std::vector,则必须使用 more 而不是零条目分配正确的数组。如果你超过了那个,那么你必须重新分配它以增加数组的大小。

类似的东西:

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;
    }
}