C++ 从std:vector获取数组

C++ 从std:vector获取数组,c++,arrays,vector,C++,Arrays,Vector,从向量中获取字符数组的最简单方法是什么 我的方法是使用向量开始和结束迭代器初始化字符串,然后从该字符串中获取.c_str()。还有其他有效的方法吗?std::vector chars; std::vector<char> chars; char* char_arr = chars.data(); // &chars[0] char*char_arr=chars.data();//&字符[0] Scott Meyers的有效STL中讨论了这一点,您可以执行&vec[0]来获取

从向量中获取字符数组的最简单方法是什么

我的方法是使用向量开始和结束迭代器初始化字符串,然后从该字符串中获取.c_str()。还有其他有效的方法吗?

std::vector chars;
std::vector<char> chars;
char* char_arr = chars.data(); // &chars[0]
char*char_arr=chars.data();//&字符[0]
Scott Meyers的有效STL中讨论了这一点,您可以执行
&vec[0]
来获取
std::vector
的第一个元素的地址,并且由于标准将向量限制为具有连续内存,因此您可以执行类似的操作

// some function
void doSomething(char *cptr, int n)
{

}

// in your code
std::vector<char> chars;

if (!chars.empty())
{
    doSomething(&chars[0], chars.size());
}
//一些函数
无效剂量测量(字符*cptr,整数n)
{
}
//在代码中
std::向量字符;
如果(!chars.empty())
{
doSomething(&chars[0],chars.size());
}
编辑:来自评论(感谢卡萨布兰卡)

  • 要小心保存指向此数据的指针,因为如果修改向量,指针可能会失效

+1但请注意,如果以后修改向量,指针可能会变得无效。
data()
不是标准STL规范的一部分。它是新的C++0x STL(在MVSC和GCC中实现)的一部分,如果您的编译器支持它,应该在&chars[0]上使用。@ronag:为什么首选它?仅仅因为可读性还是其他原因存在?@casablanca和(从C++11开始)