我试图以最好的方式迭代静态字符串数组的所有元素.我希望能够在一行上声明它并轻松添加/删除元素,而无需跟踪数字.听起来很简单,不是吗?
可能的非解决方案:
vector<string> v;
v.push_back("abc");
b.push_back("xyz");
for(int i = 0; i < v.size(); i++)
cout << v[i] << endl;
Run Code Online (Sandbox Code Playgroud)
问题 - 无法使用字符串列表在一行上创建向量
可能的非解决方案2:
string list[] = {"abc", "xyz"};
Run Code Online (Sandbox Code Playgroud)
问题 - 无法自动获取字符串数量(我知道).
必须有一个简单的方法来做到这一点.
Ant*_*amp 107
C++ 11添加了初始化列表以允许以下语法:
std::vector<std::string> v = {"Hello", "World"};
Run Code Online (Sandbox Code Playgroud)
至少在GCC 4.4中添加了对此C++ 11功能的支持,并且仅在Visual Studio 2013中添加.
Tyl*_*ler 36
您可以vector<string>从静态创建的char*数组中简要地初始化a :
char* strarray[] = {"hey", "sup", "dogg"};
vector<string> strvector(strarray, strarray + 3);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这会复制所有字符串,因此您使用两倍的内存.您可以使用Will Dean的建议在这里用arraysize(str_array)替换幻数3 - 虽然我记得有一些特殊情况,其中特定版本的arraysize可能会做坏事(抱歉我不能立即记住细节) .但它经常正常工作.
另外,如果你真的对这一行很感兴趣,你可以定义一个可变参数宏,这样就可以使用一行代码DEFINE_STR_VEC(strvector, "hi", "there", "everyone");.
Wil*_*ean 23
问题 - 无法自动获取字符串数量(我知道).
有一种沼泽标准的方法,很多人(包括MS)定义宏,如arraysize:
#define arraysize(ar) (sizeof(ar) / sizeof(ar[0]))
Run Code Online (Sandbox Code Playgroud)
小智 9
用C++声明一个字符串数组,如下所示: char array_of_strings[][]
例如 : char array_of_strings[200][8192];
将包含200个字符串,每个字符串的大小为8kb或8192字节.
用于strcpy(line[i],tempBuffer); 将数据放入字符串数组中.
一种可能性是使用NULL指针作为标志值:
const char *list[] = {"dog", "cat", NULL};
for (char **iList = list; *iList != NULL; ++iList)
{
cout << *iList;
}
Run Code Online (Sandbox Code Playgroud)