C++中向量的const char *[]的长度
如何获取const char*数组索引的长度 矢量:C++中向量的const char *[]的长度,c++,vector,const-char,C++,Vector,Const Char,如何获取const char*数组索引的长度 矢量: std::vector<const char*> _infoBarText; _infoBarText.assign(text, text+4); 将字符数组分配给向量: std::vector<const char*> _infoBarText; _infoBarText.assign(text, text+4); 如何从向量中获得单个字符串(如当前T)的长度?漫长的道路: #include <vect
std::vector<const char*> _infoBarText;
_infoBarText.assign(text, text+4);
将字符数组分配给向量:
std::vector<const char*> _infoBarText;
_infoBarText.assign(text, text+4);
如何从向量中获得单个字符串(如当前T)的长度?漫长的道路:
#include <vector>
#include <cstring> // for strlen
std::vector<const char*> _infoBarText;
char const *str = _infoBarText[0]; // or any other valid index
auto len = std::strlen(str);
原始C字符串裸露字符*-S并不适合现代C++代码。 如果您将其更改为std::vector,您就可以在不增加任何开销的情况下解决您的问题,因为您正在使用文本对其进行初始化,并且作为一项额外的功能,您可能会使它更安全、更可用
有关详细信息,请参阅 例如:用同样的方法计算任何C样式字符串的长度。但为什么一开始就使用C样式的字符串呢?当使用const char*引用字符串文本时,这些信息就会丢失。您必须再次计数字符,通常使用std::strlen。我建议使用std::vector。那么你只需要向量名[index].size为什么还要引入str呢?自动len=strlen_infoBarText[0];同样如此thing@NathanOliver当然,但这样做更容易弥合索引向量和将const*char传递给strlen之间的心理鸿沟。请注意,在构建向量时,每个c字符串都会有一个ON遍历,以获得其大小。@FrançoisAndrieux-谢谢,更正了错误answer@NathanOliver-不,不是文字。你能指出它是如何得到大小的吗?它只有一个指针,构造函数说它调用Traits::length,这需要遍历。@NathanOliver-添加了一个示例,请看一看
#include <string_view>
#include <vector>
#include <iostream>
int main() {
using namespace std::literals;
std::vector<std::string_view> strs = { "hello"sv, "there"sv };
for (auto&& str: strs)
std::cout << str << str.size();
return 0;
}
#include <string_view>
#include <vector>
#include <iostream>
int main()
{
using namespace std::literals;
std::vector<std::string_view> strs = std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >{std::initializer_list<std::basic_string_view<char, std::char_traits<char> > >{std::operator""sv("hello", 5ul), std::operator""sv("there", 5ul)}, std::allocator<std::basic_string_view<char, std::char_traits<char> > >()};
{
std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > & __range = strs;
__gnu_cxx::__normal_iterator<std::basic_string_view<char, std::char_traits<char> > *, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > > __begin = __range.begin();
__gnu_cxx::__normal_iterator<std::basic_string_view<char, std::char_traits<char> > *, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > > __end = __range.end();
for( ; __gnu_cxx::operator!=(__begin, __end); __begin.operator++() )
{
std::basic_string_view<char, std::char_traits<char> > & str = __begin.operator*();
std::operator<<(std::cout, std::basic_string_view<char, std::char_traits<char> >(str)).operator<<(str.size());
}
}
return 0;
}