0

我需要调整数组的大小并在那里复制值......所以我知道,我需要一个动态数组,但我不能使用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 感谢您的任何建议,如何解决这个问题..

4

1 回答 1

2

该变量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;
    }
}
于 2013-03-16T21:59:26.310 回答