我有一个函数,它接受一个整数并返回一个由开关选取的字符串。这些字符串是连贯文本的一部分,每当我想编辑该函数在为每个连续 int 调用时返回的连贯文本时,我希望能够向开关添加大小写。
该函数现在的样子:
std::string proceed(int id){
switch(id){
case 1: return "Hello";
case 2: return "my ";
case 3: return "is";
case 4: return "Marc";
}
}
我希望能够在案例 2 之后和案例 3 之前插入“Name”。我现在要做的是插入另一个案例 3 :return “Name”;并将下面的所有索引增加 1。这是非常繁琐和可怕的工作流程。
我正在寻找一种方法,以 C++ 合法的方式执行以下操作:
std::string proceed(int id){
int i = 0;
switch(id){
case ++i: return "Hello";
case ++i: return "my ";
case ++i: return "is";
case ++i: return "Marc";
}
}
此处的 case 语句始终(在代码中)使用相同的符号,这允许将 case 转储到任何地方而无需调整所有 case。
是否有任何语法或工具可以以简洁的方式执行此操作? (除了使用一些单独的程序进行自动文本编辑之外)
我以为
map
是解决方案,但是vector
有更简单的插入方法:
如果需要更多逻辑,可以封装一下:
#include <iostream>
#include <vector>
#include <string>
void insertAtIndex(std::vector<std::string>& vec, int index, const std::string& newValue) {
// Insert the new value at the desired index
if (index <= vec.size()) {
vec.insert(vec.begin() + index, newValue);
} else {
std::cerr << "Invalid index" << std::endl;
}
}
简单地称呼它:
int main() {
// Create a vector to store the strings
std::vector<std::string> vec = {"Hello", "my", "is", "Marc"};
// Insert a new value at index 3
insertAtIndex(vec, 3, "name");
// Test the function
for (int i = 0; i <= vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}