从std:vector获取数组

Sky*_*eSM 37 c++ arrays vector

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

我正在做的方法是使用vector begin和end迭代器初始化一个字符串,然后从这个字符串中获取.c_str().还有其他有效的方法吗?

eco*_*ast 73

这在Scott Meyers的Effective STL中进行了讨论,你可以做到&vec[0]获得an的第一个元素的地址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());
}
Run Code Online (Sandbox Code Playgroud)

编辑:从评论(谢谢卡萨布兰卡)

  • 警惕保持指向此数据的指针,因为如果修改了向量,指针可能无效.

  • +1但请注意,如果稍后修改了向量,指针可能会变为无效. (21认同)

ron*_*nag 44

std::vector<char> chars;
char* char_arr = chars.data(); // &chars[0]
Run Code Online (Sandbox Code Playgroud)

  • 它是新的C++ 0x STL(在MVSC和GCC中都实现)的一部分,如果你的编译器支持它,应该在&chars [0]上使用它. (18认同)
  • `data()`不是标准STL规范的一部分. (2认同)