使用智能指针和 std::vector 设置一个 char 数组
Setting up an array of char using smart pointer and std::vector
我想要一个 char[maxname]
的数组。我最初的方法如下
class char_list
{
char_list(int noc){names_.reserve(noc)}
std::vector<std::unique_ptr<char>> names_;
void setname( const char* name){ names_.push_back(name)};
}
当我尝试通过例如
调用例程时
char aux[100];
aux = 'asadsdsd'
const char* aux1 = aux;
setname(aux1);
我收到错误
candidate function not viable: no known conversion from 'const char *' to
'const std::__1::__vector_base<std::__1::unique_ptr<char, std::__1::default_delete<char> >, std::__1::allocator<std::__1::unique_ptr<char, std::__1::default_delete<char> > > >::value_type' (aka
'const std::__1::unique_ptr<char, std::__1::default_delete<char> >') for 1st argument
_LIBCPP_INLINE_VISIBILITY void push_back(const_reference __x);
我正在使用 clang
与 C++17 标准。
I want to have an array of char[maxname]
数组的数组称为二维数组。
constexpr unsigned N = 10; // 10 as an example.
char arr[N][maxname];
在 C++ 中,您通常应该放弃 char[] 和数组。通常您应该使用 std::vector,如果是字符串,则使用 std::string。 Vector 自动增长和收缩,并为您进行内存管理。 std::string 功能相同,但专用于字符串管理。
所以你的代码应该是这样的:
std::vector<std::string> names;
然后你可以做一些很棒的事情,比如:
names.push_back("ABC");
然后您就可以轻松取回您的名字了:
std::string &name0 = names[0];
或等效的 char*(仅用于 C 互操作性):
const char *c_string = name0.c_str();
我想要一个 char[maxname]
的数组。我最初的方法如下
class char_list
{
char_list(int noc){names_.reserve(noc)}
std::vector<std::unique_ptr<char>> names_;
void setname( const char* name){ names_.push_back(name)};
}
当我尝试通过例如
调用例程时char aux[100];
aux = 'asadsdsd'
const char* aux1 = aux;
setname(aux1);
我收到错误
candidate function not viable: no known conversion from 'const char *' to
'const std::__1::__vector_base<std::__1::unique_ptr<char, std::__1::default_delete<char> >, std::__1::allocator<std::__1::unique_ptr<char, std::__1::default_delete<char> > > >::value_type' (aka
'const std::__1::unique_ptr<char, std::__1::default_delete<char> >') for 1st argument
_LIBCPP_INLINE_VISIBILITY void push_back(const_reference __x);
我正在使用 clang
与 C++17 标准。
I want to have an array of char[maxname]
数组的数组称为二维数组。
constexpr unsigned N = 10; // 10 as an example.
char arr[N][maxname];
在 C++ 中,您通常应该放弃 char[] 和数组。通常您应该使用 std::vector,如果是字符串,则使用 std::string。 Vector 自动增长和收缩,并为您进行内存管理。 std::string 功能相同,但专用于字符串管理。
所以你的代码应该是这样的:
std::vector<std::string> names;
然后你可以做一些很棒的事情,比如:
names.push_back("ABC");
然后您就可以轻松取回您的名字了:
std::string &name0 = names[0];
或等效的 char*(仅用于 C 互操作性):
const char *c_string = name0.c_str();