字符串数组的 C++ 动态向量
C++ dynamic vector of string array
我想创建一个动态向量,每个向量元素都是一个字符串数组。
我想到的数据结构是这样的:
VECTOR:
[0] = [str1, str2, str3]
[1] = [str1, str2, str3]
[2] = [str1, str2, str3]
我在 res 变量中正确插入了值,但我的代码无法正常工作:打印循环执行了 4 次,但每次只打印最后一个元素。
我相信问题可能是:
1)我没有在向量中正确地推送字符串数组;
2) 当我想打印它时,我没有正确管理对向量和所有字符串的迭代。
这是我的代码:
std::vector<std::string*> DatabaseConnector::ExecuteQuery(std::string query, std::vector <std::string> columns)
{
std::vector<std::string*> results;
std::string res[columns.size() + 1]; // last value = '[=11=]' to signal end of array
db_params.res = db_params.stmt->executeQuery(query);
while (db_params.res->next()) // Access column data by alias or column name
{
int i = 0;
for(std::string s : columns)
res[i++] = db_params.res->getString(s);
res[i] = "[=11=]";
results.push_back(res);
}
for(auto el :results)
{
int i=0;
while(el[i].compare("") != 0)
std::cout << el[i++] << " ";
std::cout << std::endl;
}
return results;
};
std::string res[columns.size() + 1];
是一个可变长度数组,您正在将指向第一个元素的指针推入向量。
您应该使用 std::vector<std::string> res;
和 std::vector<std::vector<std::string>> results;
std::vector<std::vector<std::string>> DatabaseConnector::ExecuteQuery(std::string query, const std::vector <std::string> &columns)
{
std::vector<std::vector<std::string>> results;
db_params.res = db_params.stmt->executeQuery(query);
while (db_params.res->next()) // Access column data by alias or column name
{
std::vector<std::string> res;
for(std::string s : columns)
res.push_back(db_params.res->getString(s));
results.push_back(res);
}
for(const auto &el :results)
{
for (const auto &res : el)
std::cout << res << " ";
std::cout << std::endl;
}
return results;
}
我想创建一个动态向量,每个向量元素都是一个字符串数组。
我想到的数据结构是这样的:
VECTOR:
[0] = [str1, str2, str3]
[1] = [str1, str2, str3]
[2] = [str1, str2, str3]
我在 res 变量中正确插入了值,但我的代码无法正常工作:打印循环执行了 4 次,但每次只打印最后一个元素。 我相信问题可能是: 1)我没有在向量中正确地推送字符串数组; 2) 当我想打印它时,我没有正确管理对向量和所有字符串的迭代。
这是我的代码:
std::vector<std::string*> DatabaseConnector::ExecuteQuery(std::string query, std::vector <std::string> columns)
{
std::vector<std::string*> results;
std::string res[columns.size() + 1]; // last value = '[=11=]' to signal end of array
db_params.res = db_params.stmt->executeQuery(query);
while (db_params.res->next()) // Access column data by alias or column name
{
int i = 0;
for(std::string s : columns)
res[i++] = db_params.res->getString(s);
res[i] = "[=11=]";
results.push_back(res);
}
for(auto el :results)
{
int i=0;
while(el[i].compare("") != 0)
std::cout << el[i++] << " ";
std::cout << std::endl;
}
return results;
};
std::string res[columns.size() + 1];
是一个可变长度数组,您正在将指向第一个元素的指针推入向量。
您应该使用 std::vector<std::string> res;
和 std::vector<std::vector<std::string>> results;
std::vector<std::vector<std::string>> DatabaseConnector::ExecuteQuery(std::string query, const std::vector <std::string> &columns)
{
std::vector<std::vector<std::string>> results;
db_params.res = db_params.stmt->executeQuery(query);
while (db_params.res->next()) // Access column data by alias or column name
{
std::vector<std::string> res;
for(std::string s : columns)
res.push_back(db_params.res->getString(s));
results.push_back(res);
}
for(const auto &el :results)
{
for (const auto &res : el)
std::cout << res << " ";
std::cout << std::endl;
}
return results;
}