int main()
{
struct ss
{
int a[5];
int& operator[] (const int& i) { return a[i]; }
} a{ 1,2,3,4,5 }, b{ 9,8,7,6,5 };
vector<ss> v;
v.resize(10);
v[0] = a;
v[1] = b;
//all the rest is uninitialised array
v.push_back(a); // pushes to the end, with reallocation
v.push_back(b); // pushes to the new end, with reallocation
auto d = v.data();
// cin >> v[1][3]; //input any element from stdin
cout << "show two element: "<< v[1][2] <<":"<< v[1][3] << endl;
return 0;
}
// 1 - A std::vector of char*, more preper way is to use a std::vector<std::vector<char>> or std::vector<std::string>
std::vector<char*> v(10, "hi!"); // You cannot put standard library containers e.g. char[] into std::vector!
for (auto& i : v)
{
//std::cout << i << std::endl;
i = "New";
}
for (auto i : v)
{
std::cout << i << std::endl;
}
9条答案
按热度按时间2uluyalo1#
数组不能存储在向量中(或任何其他标准库容器中)。标准库容器存储的内容必须是可复制和可赋值的,而数组两者都不是。
如果你真的需要把数组放到一个向量中(你可能不需要--使用向量的向量或者字符串的向量更有可能是你需要的),那么你可以把数组 Package 在一个结构体中:
然后创建一个结构体向量:
dxxyhpgq2#
你需要
如果你想做一个字符向量而不是字符串向量,
表达式
sizeof(test)/sizeof(*test)
用于计算数组测试中的元素数。mfuanj7w3#
使用
std::string
代替字符数组t1qtbnec4#
您可以使用boost::array来完成此操作:
也可以使用向量的向量,如下所示:
gz5pxeao5#
可以直接定义char类型向量,如下所示。
czfnxgou6#
事实上,从技术上讲,你可以将C数组存储在一个向量中,不是直接地,而是通过一个简单的解决方案。这很有意义。问题已经被Anon回答了,但是仍然需要一些解释。将数组 Package 在一个类中将使向量数据满足多维数组的要求。C 11和更高版本的STL已经提供了这样的 Package 器
std::array
。向量的向量适用于许多用途,但不是答案,在某些情况下,它就是错误的。由于不清楚数组和指针之间的区别,或多维数组和数组的数组之间的区别,陷入修复错误的陷阱是一种不愉快的经历。向量的向量包含向量作为元素:每个都包含大小、容量、指向内存中随机数据段的数据指针的副本。2这些数据段不会像多维数组一样一个接一个地放置。3这将导致与其他编程语言或库的互操作性问题,因为它们不支持C++ vector。
但是数组的向量总是指向内存的一个连续段,在一个地方以正确的顺序包含多维数组的所有段。从技术上讲,数据指针将指向与多维数组相同的东西。没有很好的理由保持每个数组元素的大小,而已知它对所有元素都是相同的。至少它是冗余的。但这并不是什么大问题,更大的问题是,它破坏了多维数组的结构。
因此,创建数组的向量可以间接完成,通过将数组 Package 在类中或使用现有的
std::array
。它将数据存储在内存中,与二维数组相同。这种方法已经被许多库广泛使用。在低级别,它将很容易与不支持C++向量的API互操作。因此,如果不使用std::array,它将看起来如下所示:在内存中,它看起来很容易预测,12个数组,两个在开头,两个在结尾,初始化了,另外8个在中间,未初始化,用零填充
C++11及更高版本有
std::array
,无需重新设计:现在,这就是为什么向量的向量不是答案。
数据是如何存储在内存中的永远无法猜测,它肯定不是一个多维数组
jaxagkaj7#
FFWD到2019年。虽然这个代码在2011年也工作。
建议:尝试优化
std::string
的使用。对于字符缓冲,std::array<char,N>
是最快的,std::vector<char>
更快。https://wandbox.org/permlink/wcasstoY56MWbHqd
xdyibdwo8#
下面是如何从C样式字符串或std::string或C++中的字符数组初始化字符的std::vector:
ncecgwcz9#
我发现可以将char* 放入std::vector中: