C++在向量中获取const char*[]的长度

Daa*_*iel 0 c++ const-char vector

如何获取const char*数组索引的长度?

矢量:

std::vector<const char*> _infoBarText;
Run Code Online (Sandbox Code Playgroud)

const char*[]:

const char* text[4] = {"Current T:", "Target T:", "Time elapsed:", "Time remaining:"};
Run Code Online (Sandbox Code Playgroud)

将char数组分配给向量:

_infoBarText.assign(text, text+4);
Run Code Online (Sandbox Code Playgroud)

如何"current T"从向量中获取单个字符串的长度?

bob*_*bah 7

原始C字符串(裸char*-s)不适合现代C++代码.

如果你把它改成std::vector<std::string_view>你就可以在没有(几乎)任何开销的情况下解决你的问题(假设你用文字初始化),作为奖励你可能会使它更安全,更实用.

有关详细信息,请参阅cppreference文章.

示例(GodBolt):

#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;
}
Run Code Online (Sandbox Code Playgroud)

GodBolt Code Insight输出(注意std::operator""sv("hello", 5ul)):

#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;
}
Run Code Online (Sandbox Code Playgroud)