我在使用C ++中的多维数组创建和获取值时遇到问题。我花了很长时间试图弄清楚为什么这不是编译。这里有什么问题?
代码如下;
vector<vector<string>> vec;
vec[0][0] = "asd";
cout << vec[0][0] << endl;
答案 0 :(得分:1)
您不能使用下标运算符为空向量赋值。
您可以使用emplace_back
或push_back
或insert
例如
std::vector<std::vector<std::string>> vec;
vec.emplace_back( 1, "asd" );
vec.push_back( { 1, "fgh" } );
vec.insert( vec.end(), { 1, "jkl" } );
std::cout << vec[0][0] << std::endl;
std::cout << vec[1][0] << std::endl;
std::cout << vec[2][0] << std::endl;
或者您最初可以使用所需数量的元素创建矢量。在这种情况下,您可以使用下标运算符。
例如
std::vector<std::vector<std::string>> vec( 1, std::vector<std::string>( 1 ) );
vec[0][0] = "asd";
std::cout << vec[0][0] << std::endl;
有很多方法可以完成这项任务。例如,您可以使用以下方法
std::vector<std::vector<std::string>> vec;
vec.resize( 1 );
vec[0].resize( 1 );
vec[0][0] = "asd";
std::cout << vec[0][0] << std::endl;
答案 1 :(得分:0)
您应该阅读构造函数的文档。当你这样做时:
public class IntWithUnitProperty : ProductProperty
{
[Required]
public int Value { get; set; }
public string Unit { get; set; }
}
RenameColumn(table: "dbo.ProductProperties", name: "Value1", newName: "Value2");
RenameColumn(table: "dbo.ProductProperties", name: "Value2", newName: "Value3");
AlterColumn("dbo.ProductProperties", "Value1", c => c.Int());
AlterColumn("dbo.ProductProperties", "Value2", c => c.String());
你有两次UB,因为你试图访问向量中不存在的元素。第一行只是创建一个空向量。你要么想推新元素:
Int...
或将大小传递给构造函数:
vector<string> vec;
vec[0] = "asd";
cout << vec[0] << endl;
对于2D,这将是:
vector<string> vec;
vec.push_back("asd");
cout << vec[0] << endl;
或:
size_t start_size=10;
vector<string> vec(start_size);
vec[0] = "asd";
cout << vec[0] << endl;
但是,使用typedef vector<vector<string>> MAT;
MAT mat;
vector<string> vec;
vec.push_back("asd");
mat.push_back(vec);
cout << mat[0][0] << endl;
通常是不可取的。