c++ - 如何从二维向量数组的特定位置提取元素到特定位置的另一个二维向量数组中
问题描述
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main(){
//first question
vector<vector<string> > sample{ {"Hello"}, {"World"} };
vector<vector<string> > test;
test[0][0]=sample[0][0]; //doesnt work
test[0][0].push_back(sample[0][0]); //still doesnt work
test.insert(0,0,sample[0][0]); //also doesnt work
//second question
test[1][0].push_back("Hello"); //doesnt work
//nothing works
//how?????????
}
我正在尝试编写 C++ 程序,将元素从向量的特定位置复制到向量的另一个特定位置。示例:我想将“Hello”元素样本 [0][0] 复制到 test[0][0] 中。我尝试了上述方法,但没有任何效果。第二个问题是如果我想将“世界”的样本[0][1]复制到测试[100][100]中,怎么做?
附言。错误的副本
[test.cc 2020-02-29 12:51:27.385]
,,test.cc: In function ‘int main()’:
test.cc:5:75: error: no matching function for call to ‘std::vector<std::vector<std::__cxx11::basic_string<char> > >::vector(<brace-enclosed initializer list>)’
5 | vector<vector<string> > sample{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
| ^
In file included from /usr/include/c++/9/vector:67,
from /usr/include/c++/9/functional:62,
from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13,
from /usr/include/c++/9/algorithm:71,
from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65,
from test.cc:1:
/usr/include/c++/9/bits/stl_vector.h:650:2: note: candidate: ‘template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)’
650 | vector(_InputIterator __first, _InputIterator __last,
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:650:2: note: template argument deduction/substitution failed:
test.cc:5:75: note: couldn’t deduce template parameter ‘_InputIterator’
5 | vector<vector<string> > sample{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
| ^
In file included from /usr/include/c++/9/vector:67,
from /usr/include/c++/9/functional:62,
from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13,
from /usr/include/c++/9/algorithm:71,
from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65,
from test.cc:1:
/usr/include/c++/9/bits/stl_vector.h:622:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
622 | vector(initializer_list<value_type> __l,
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:622:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/9/bits/stl_vector.h:604:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
604 | vector(vector&& __rv, const allocator_type& __m)
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:604:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/9/bits/stl_vector.h:586:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::false_type) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::false_type = std::integral_constant<bool, false>]’
586 | vector(vector&& __rv, const allocator_type& __m, false_type)
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:586:23: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::vector<std::vector<std::__cxx11::basic_string<char> > >&&’
586 | vector(vector&& __rv, const allocator_type& __m, false_type)
| ~~~~~~~~~^~~~
/usr/include/c++/9/bits/stl_vector.h:582:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::true_type) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::true_type = std::integral_constant<bool, true>]’
582 | vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:582:23: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::vector<std::vector<std::__cxx11::basic_string<char> > >&&’
582 | vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
| ~~~~~~~~~^~~~
/usr/include/c++/9/bits/stl_vector.h:572:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
572 | vector(const vector& __x, const allocator_type& __a)
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:572:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/9/bits/stl_vector.h:569:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
569 | vector(vector&&) noexcept = default;
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:569:7: note: candidate expects 1 argument, 3 provided
/usr/include/c++/9/bits/stl_vector.h:550:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
550 | vector(const vector& __x)
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:550:7: note: candidate expects 1 argument, 3 provided
/usr/include/c++/9/bits/stl_vector.h:519:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::vector<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
519 | vector(size_type __n, const value_type& __value,
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:519:24: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::vector<std::vector<std::__cxx11::basic_string<char> > >::size_type’ {aka ‘long unsigned int’}
519 | vector(size_type __n, const value_type& __value,
| ~~~~~~~~~~^~~
/usr/include/c++/9/bits/stl_vector.h:507:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
507 | vector(size_type __n, const allocator_type& __a = allocator_type())
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:507:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/9/bits/stl_vector.h:494:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
494 | vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:494:7: note: candidate expects 1 argument, 3 provided
/usr/include/c++/9/bits/stl_vector.h:484:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector() [with _Tp = std::vector<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::vector<std::__cxx11::basic_string<char> > >]’
484 | vector() = default;
| ^~~~~~
/usr/include/c++/9/bits/stl_vector.h:484:7: note: candidate expects 0 arguments, 3 provided
[test.cc 2020-02-29 12:54:15.771]
,,test.cc: In function ‘int main()’:
test.cc:5:5: error: ‘test’ was not declared in this scope
5 | test[1][0].push_back("Hello");
| ^~~~
这就是我每次编译包含向量的东西时看到的所有废话。
解决方案
您需要在尝试访问特定索引之前调整向量的大小,在您的情况下,这意味着调整外部向量以及所有内部向量的大小。例如,如果要访问test[100][100]
,首先需要执行以下操作:
// since the index is zero-based you need a vector of
// 101 elements to access 100th element
test.resize(101);
for (auto &inner : test)
inner.resize(101);
// now you can do this
test[100][100] = sample[0][1];
您尝试过的所有其他方法都不起作用,因为您尝试调用不存在的方法或使用了错误的对象。例如,test[0][0]
is a string
which does not have push_back
but for characters that may not what you are trying to do,所以你可以这样做:
test.push_back({}); // add empty vector to the outer vector
test[0].push_back(sample[0][0]); // add your string to the first inner vector
推荐阅读
- c - DUP 和 DUP2 程序。我无法理解它是如何工作的
- python - Python Panda 数据框 - 从字符串到日期的整行
- php - 如何将 foreach 中的 2 个或更多值合并为 1 个变量
- angular - 根据Angular 6中的变量更改更改html5类?
- javascript - 无法使用 Angular 6 从 firebase 数据库中删除对象
- python - QlistWidget - 包含多个信号/连接的列表?
- swift - 字符串的子字符串重用原始字符串的存储?
- php - 为什么即使我更改了 CSS 样式表中的 background-color 属性,我的 .php 网页背景颜色也没有改变?
- gdb - GDB 在到达剥离二进制文件的断点时暂停
- python - 将外部字典中的元素附加到赋值内部的字典中