Aly*_*Aly 13 c++ arrays vector
我是C++的新手,并且不断被告知使用std::vector而不是new[].
我试图实现这个功能,在那里我知道向量的大小,并希望随机分配给它(不是顺序).
但是,当运行它时,我的程序终止没有错误输出,所以我很难过.
vector<string> v1;
v1.resize(2);
v1.insert(v1.begin() + 1, "world");
v1.insert(v1.begin() + 0, "world");
cout << v1.at(1) << endl;
Run Code Online (Sandbox Code Playgroud)
joh*_*ohn 19
不要放弃,这比那更容易
vector<string> v1(2);
v1[1] = "world";
v1[0] = "world";
cout << v1[1] << endl;
Run Code Online (Sandbox Code Playgroud)
vector::insert是用于何时向向量中添加项目,而不是在想要替换已存在的项目时,vector::insert换句话说就是更改向量的大小.
Jos*_*eld 12
首先,您将其调整为两个空字符串:
{"", ""}
Run Code Online (Sandbox Code Playgroud)
然后插入"world"之前begin() + 1或第二个元素:
{"", "world", ""}
Run Code Online (Sandbox Code Playgroud)
然后插入"world"之前begin()或第一个元素:
{"world", "", "world, ""}
Run Code Online (Sandbox Code Playgroud)
然后使用v1.at(1)并访问第二个元素并获取空字符串.
据推测,您不希望std::vector::insert在现有元素之间插入新元素.您希望像使用数组一样执行此操作,其中operator[]:
vector<string> v1(2);
v1[1] = "world";
v1[0] = "world";
cout << v1.at(1) << endl;
Run Code Online (Sandbox Code Playgroud)
ema*_*tel 10
随机分配
只需使用索引(显然,验证它是< size)
v1[index] = value;
Run Code Online (Sandbox Code Playgroud)
随机插入(验证索引< size)
v1.insert(v1.begin() + index, value);
Run Code Online (Sandbox Code Playgroud)
要在结尾/追加处顺序插入(不需要索引,您的值将插入到向量的末尾)
v1.push_back(value);
Run Code Online (Sandbox Code Playgroud)
如果您打算插入多个值,请考虑调用reserve()向量,以便可以分配足够的内存来存储所有项目,否则当您插入数据时,随着向量的增长,最终可能会有很多重新分配
您的程序运行正常.您的错误在您的代码逻辑中.
Insert不会更改存储在索引1处的字符串.它将字符串放在位置1,并将所有索引从1向右移动.
start first insert second insert
("","") -> ("", "world, "") -> ("world","","world","")
因此,当您打印v1.at(1)时,您正在打印一个空字符串.
要解决此问题,您可能希望使用:
v1.at(1)="world"
v1.at(0)="world"
Run Code Online (Sandbox Code Playgroud)
- 要么 -
v1[1] ="world"
v1[0] ="world"
Run Code Online (Sandbox Code Playgroud)
这两个解决方案是等效的,但第二个解决方案不会进行任何边界检查.如果出现越界错误,第一个将抛出错误.只要你能保证你永远不会超出界限,这就无所谓了.