我不允许使用矢量类,所以我需要自己制作。我做了一个int矢量类,它工作正常,但是当试图为字符串创建它时,它编译但由于指针而给我一个错误。我提出错误的任何暗示?我所做的只是更改字符串的每个int元素,但显然这不起作用。请帮助我很困惑。
public:
StringRow(){
elements = new string;
size = 0;
}
~StringRow(){...}
void push_back(string value){...}
};
答案 0 :(得分:0)
您定义了指向变量的指针,而不是变量数组。
elements = new string;
将其替换为
elements = new string[size];
您可以通过定义初始大小来优化算法。只有在必要时才创建更大的数组。
答案 1 :(得分:0)
有几个问题:
string* tmpElementsArray = new string[size + 1];
进行分配,则需要使用delete [] tmpElementsArray
解除分配; 更正了工作版本:
#include <string>
#include <iostream>
using namespace std;
class StringRow {
private:
string* elements = nullptr;
int size = 0;
public:
// constructor not needed
// StringRow() {
// elements = nullptr;
// size = 0;
// }
~StringRow() {
delete []elements;
}
void push_back(string value) {
string* tmpElementsArray = new string[size + 1];
for (int i = 0; i<size; i++) {
tmpElementsArray[i] = elements[i];
}
delete [] elements;
elements = tmpElementsArray;
elements[size] = value;
size++;
}
int length() {
return size;
}
string at(int index) {
if (index<size) {
return elements[index];
}
}
};
int main()
{
StringRow s;
string str1 = "hello";
string str2 = "hello2";
s.push_back(str1);
s.push_back(str2);
cout << s.at(0) << endl ;
cout << s.at(1) << endl;
}
如果delete []elements
为elements
,则执行nullptr
即可。
注意:这不是最有效的方法。